Hacker News .hnnew | past | comments | ask | show | jobs | submit | hamandcheese's commentslogin

I worry that optimistic updates is going to become trendy and applied to more software, but without any plan for the "sad path" - failed to sync, sync conflict, etc. Get ready for a whole new era of race conditions and frustration!


> optimistic updates [...] without any plan for the "sad path"

based on my experience, this is a great description of the sync implementation in many already widely deployed products (say, off the top of my head, OneNote, OneDrive)


Yeah, it's a big part of the tradeoff for this kind of architecture. In Zero, this is a first-class concern via the ConnectionStatus API:

https://zero.rocicorp.dev/docs/connection

Errors and connection are handled in a centralized place so that they automatically get applied to all paths.

Errors immediately disconnect the app and trigger UI. Writes are no longer accepted. After 1 minute of of failed connection attempts, same happens.

This formalizes and enforces the common pattern in popular sync-based apps of detecting disconnects fairly aggressively and warning the user.


Don't you have the same problems with basic CRUD apps? Also you need to handle the sad path for every single request instead of having the sync engine do it all in one place.


Correct but the feedback is usually more immediate. Save a change to your issue and it fails - You will get an error toast and probably stay on the form.

In the local first world you might have navigated away already and created 3 more issues of which 2 more failed because of schema drift or other conflicts. And you might have edited one that was deleted. And now you need to figure out what exactly to tell the user - or what not to tell them.


Well the sync engine can figure out if there's an issue fast, say <500ms, if you build it that way. Then you can just make a toast telling the user there are issues and anything they do will be saved locally only for the time being.

Warn the user that if they leave the website their changes won't be saved remotely.


In reality conflicts almost never happen.


I agree. I just argue that you would still want your app to handle those with as little data loss as possible and in a way that's understandable to the user.


You can have it in one place without using background sync.

Our application uses classical "foreground update" paradigm, but each API call automatically shows an error to the user and returns him/her to the same place where error originated to fix the input and/or retry. As a bonus, we also automatically show progress indicator for any HTTP request that takes more than 1s (which is rare).

This is as simple as:

    await context.api.explorer.rename(
        {
            objectKey,
            name
        }
    );

    // objectKey: ApiTypes.ObjectKey
    // name: string
The above initiates an HTTP request:

- If that request succeeds, you know that the new name has been durably committed to the database.

- If it fails because the new name is not unique, the user sees the error, and can then enter a different name before retrying. The key is that the UI context is preserved during API failure, so everything the user had entered is still on the screen.

- If it takes more than 1s, the user sees a progress indicator which he/she can click to cancel the operation. This also returns him/her to the original UI.

The magic is in the `rename` itself - it was auto-generated from our back-end API such that it wires into our error reporting and progress UI.


The issue that I foresee is that the point of error becomes decoupled from the UI and the UI doesn't handle a delayed error. Especially if retrofit into existing products.


The complexity required of a basic CRUD app versus a client-side optimistic update are worlds apart.

Exhaust all other optimizations before lying to your users about what just happened.


well it has been the standard for non critical feedback.

I would not implement optimistic resolution in key information, prices, for example. They live in the server and backend should keep the total control in the client side, even feedback response time.


From experience: I work on a small team maintaining build infrastructure for my entire company. My goal, as much as possible, is to maintain a single build environment that can serve all purposes.

But it has proven quite the challenge to support old Linux distros. We have tried using nix to pin deps, but this easily leads to new issues: hardcoded RPATHs leaking into binaries, glibc compatibility issues, etc.

If we instead fork the build environment and use an old Ubuntu for building our Linux app, then my life gets harder, because now I have two targets for a whole lot of internal tooling that my team maintains, and that tooling needs to be deployed to both build environments. Again, its the same shit: glibc mismatches, missing/different shared libraries, etc. Just causing problems in a different place.

There is certainly some element of skill issue at play. But I wouldn't call it easy.


Me too but my job is easier since I can target a specific version of ubuntu so I'm making debs and I don't have that problem.

I have recently been working on a C11 GTK+ based task manager where I run into this. https://github.com/hparadiz/evemon/tree/main/packaging

This is why I said bundle your libs. If you bundle ALL of your libs you can't possibly run into an issue if your install script is run as root. Unless it's an extremely eccentric non desktop oriented system at which point that's kind of on them.

If you wanna cover 99.9% of Linux you build fedora, ubuntu, debian, nixos, arch and have a tar.gz as your overflow. For each target the lowest available LTS and don't waste time on distros that aren't getting security updates. It's not reasonable to ask for binaries built against your specific 11 year old gcc.

edit wanted to add one more thing.

I'm a big believer in having your tar.gz and install script inform your deb, rpm, aur, etc. It should be basically the same exact thing as your tar.gz just done in the format those distros want.


Couldn't the need for Zones have been solved with ARP-like probing? I.e. if you don't know on which interface to route a link local address, try pinging the address from each interface, and see which one responds.


No, because you could feasibly end up with neighbour entries for the same address via multiple interfaces and then you are no further forward.


Has wealth been distributed from exploiter to exploited? Doesn't seem like it. It just seems like the 99% are being exploited a little more evenhandedly.


It is my right to do with my printer whatever I want.


The hardware yes. Bambu's software, not quite. If you want to flash it with 3rd party firmware & use 3rd party slicers, have at it.

If you want to use Bambu's software against their TOS, OK you wouldn't be alone in that, but there's no moral high ground in it.


Sure there is. When purchased, it was able to do something. Due to an update, the customer has now been misled, because a feature was removed.

In most countries, that would violate consumer rights. There's an ethics argument here.


That's a highly creative interpretation of events. The software license agreement usually upfront covers what can or cannot not change. It is pretty rare in most countries to see successful legal action for changed features, but best of luck.


The ACCC is more than happy to explain unenforceable terms, if you'd like to do business with Australia.

Feel free to consult Steam, Google, Meta and others, if a software license is enough to ignore consumer rights.


I look forward to them sternly changing Bambu Labs' practices!


They will just fine them into oblivion; they are known to fine companies AUD10M to AUD50M for this sort of thing, and from 1st April this year they can now fine up to AUD100M.

Will this mean that Bambu will withdraw from the Australian market? Possibly maybe probably, but the ACCC takes a very hard stance against bait and switch.


The largest ACCC fine to date for a company undertaking anti consumer practices is $483m against an educational provider for misleading students.

I'd be reasonably happy to lodge a complaint if I could find a version that's reasonably articulated. As a Bambu customer in Australia I switched my printer to local mode and its been great.


It's a whole lot better than the US, but AUD100M isn't enough to scare a lot of companies. A law with real teeth would go after an increasing percentage of their revenue for each offense.


As a percentage of global revenue, sure, it's not much. But as a percentage of what that company is likely to make in the Australian market, it can be significant.


Australia is a small enough market to not matter much


Australian customer protection laws were the initial reason why Valve introduced refunds into Steam.


Then why did those company fight, and not just leave...?

Worth pointing out also that the US is the odd one out, here. Europe also enforces consumer rights.


The only place you can change contracts at will on the company side is the US, and even there it probably depends on the state.

This kind of firmware update to remotely disable feature is also illegal in the EU


A small, more ethical company filling the void Bambu Lab left can grow much faster and eat into Bambu's market share in a relatively short time.

Yes, it's not as simple as that, but it's not that impossible either.


Taking functionality away from a product after you bought it is a scum move. If the law lets them get away with it, the law should be changed.

When I buy a product, I look at reviews and make my purchasing decision on the features and functionality at the time of sale. If a software update later ruins that, I want the option to get my money back.


No, it’s not creative at all, it’s what happened — I have first hand experience to corroborate this.

Regardless, at least in the US, not only are software-based ToS becoming unenforceable, but there’s a large upswing towards “right to repair” legislation, which, I think, is what you’re arguing against here… and I really think you’re going to be on the wrong side of history with your current line of thinking (despite what Bambu Labs does).


[flagged]


No, it is with you -- the legislators are doing "fine" (and, again, are heading in a fine direction wrt RTR and software ToS).

I have no idea why you think copyright violations apply here? You seem to be throwing legal terms around without regard for their actual meaning. It's clear you're here to argue for the sake of argument, but I'd really encourage you to reflect and think about why you're so loyal to a corporate entity instead of your fellow consumers (of which there are many in the parent and sibling comments... hint: you may be on the wrong side).

Just for fun, pretend you bought a propane grill for cooking on Monday. On Tuesday, you cooked some bbq chicken and some corn. Later on Thursday, and without your knowledge or authorization, the grill no longer allowed you to use the propane apparatus for cooking non-meats unless you call a special telephone number and said a magic word whenever the call was answered. As a minimum, I feel, it'd be very confusing because, even though you're doing the exact same thing as Tuesday, the outcome is not the same.

Your freedoms have been restricted by someone else; if you are okay with that, then have fun licking boots. The rest of us will still be here advocating for your freedoms.


The "agreement" is at best coerced, and under blackmail of hardware you bought and paid for.

At worst, its a fraudulent indefinite rental masquerading as a 'sale'.

And lets discuss 'updates that fuck over your hardware'. In dwcent countries, thats hacking, and a serious criminal charge. But lol, companies are somehow exempt.


The license agreement being the AGPLv3?


> If specific terms in a contract are unfair, they are not binding on you and the trader may not rely on them.

https://europa.eu/youreurope/citizens/consumers/unfair-treat...


Maybe legally, but morally “you have permanent physical access to this but don’t ’own’ it” and anti-circumvention are debatable.

There’s a small benefit of anti-circumvention where businesses sell hardware for cheaper with restrictions and a TOS that prevents bypassing them. But even that doesn’t apply here because Bambu changed the software after purchase.


Its the people's software though, used under AGPL by Bambu. It never was Bambu's software.


This reminds me of RMS and GPLv3. Now I personally don't use GPLv3, but this here is literally a case-in-point, and it is not even only limited to the "cloud-only". Because this now includes a company threatening to sue a developer. If they sue one developer, they, by proxy, sue all of them in principle. So RMS was kind of right.

> If you want to use Bambu's software against their TOS

How does the TOS get involved here? I don't use their TOS. Why would or should they be able to enforce it? Note that it also depends on the jurisdiction. For instance, Microsoft's EULA never had any legal bearings in the EU.


Isn't their software based on AGPL'd code?

If so, then yes, the software too


"Bambu's software" is forked from an AGPL project and is therefore itself AGPL. I have a right to fork, modify, and use it how I wish subject to the terms of the AGPL. Bambu's TOS is irrelevant. Their TOS is superceded by the terms of the AGPL.


There's absolutely a moral high ground in it. That's the point.

Nobody is arguing against Bambu's legal right to be arseholes.


ESL? look up the definition of the word moral


> What printers are similarly priced and have similar specs, for someone relatively new to 3D printing?

None, really. Prusa printers are good enough though. If you value freedom and privacy, its worth a few extra dollars.


It would have been so easy for Bambu to embrace freedom and privacy and continue to enjoy our loyalty all the way to the bank, but apparently they've got to burn down what they've got.

I've got an a1 mini myself, and I'm not aware of anything comparable on the market, but there's a clear need for some competition now.


For the market overall this is great: Bambu is forcing the other manufacturers to innovate on features, ease of use and affordability in order to keep up. At the same time Bambu's antics prevent them from completely dominating. Any new printer that can compare to a Bambu (or exceed it in interesting ways) gets rewarded with customers that want anything but Bambu

It's a much more interesting and dynamic place than before Bambu's market entry


I find it interesting that many commenters here do not regard anything as 'competitive' unless it offers the same price/performance, while completely disregarding these lock-ins and privacy invasions. It seems that the reason we have all these restrictive and otherwise problematic companies is that you folks just do not assign a cost to their behaviour.


I was not aware of this behaviour when I bought it.

But you raise a good issue: are they selling these at a loss in order to leverage some sort of lock-in? If that's the reason they're so cheap, that's important to know.

I honestly wouldn't mind paying twice as much for something that's more open. But it's also an issue I haven't looked very deeply into. For my first 3d printer I just wanted something cheap and foolproof.


> None, really.

Have you looked into Centauri Carbon ?


I do not want to be in a business relationship with a company for a trivial amount of money, be it $29.99/yr or $69.99/yr or $249.99 lifetime. None of that is real money. You have no leverage, you do not own your own destiny. Complaining about the price hike is missing the whole point - Plex does not care about any individual customer, and that's the real problem (and the problem with just about every B2C business).


> They would do small PoCs, do comprehensive benchmarks and evaluations of those PoCs, and decide whether to actually go ahead

Perfect, $1mil in salaries to spare the company $500k in spend :)


You seem to have some sort of misunderstanding of what PoC means or how it works.

Nobody is spending $1mil in salary on this kind of PoCs.

And I guess the word "small" is really difficult to grasp.


Is lakeFS an FS....? Zero mention of FUSE or a kernel module at all in the README.


The title says it's a new filesystem, you either need to use fuse or a kernel module.


I mean not really. There is a FUSE implementation, but you need an enterprise account https://docs.lakefs.io/v1.60/reference/mount/

I’m not seeing a kernel module anywhere..


> The corollary to that is a clever bureaucrat can kill a proposal simply by inviting many decision makers to a meeting.

My version of this:

For my friends, everything; for my enemies, pull security in.


Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: