[HN Gopher] Offline is just online with extreme latency
       ___________________________________________________________________
        
       Offline is just online with extreme latency
        
       Author : samwillis
       Score  : 412 points
       Date   : 2023-04-19 09:09 UTC (13 hours ago)
        
 (HTM) web link (blog.jim-nielsen.com)
 (TXT) w3m dump (blog.jim-nielsen.com)
        
       | PhilipRoman wrote:
       | Speaking of this, anyone have suggestions for an offline-tolerant
       | distributed filesystem? Basically a dozen devices which get a few
       | minutes/hours of internet access per day/week and not necessarily
       | at the same time.
       | 
       | I've considered Git but not sure how much overhead it adds.
        
         | thfuran wrote:
         | That's intractable. Conflict resolution has to be done
         | differently for different types of data, so it has to be done
         | at a higher level than filesystem, unless you want a special
         | filesystem that only supports a specific kind of file or has
         | some other very significant restrictions.
        
           | preseinger wrote:
           | i don't mean to blindly +1 but this is the actual correct
           | answer and i think it deserves to be emphasized
        
         | seri4l wrote:
         | Not a distributed filesystem but syncthing can easily do what
         | you're asking for.
        
           | PhilipRoman wrote:
           | Seems promising, thank you.
        
         | cesarb wrote:
         | > Speaking of this, anyone have suggestions for an offline-
         | tolerant distributed filesystem? Basically a dozen devices
         | which get a few minutes/hours of internet access per day/week
         | and not necessarily at the same time. I've considered Git [...]
         | 
         | If you've considered git, I would suggest looking at git-annex
         | (https://git-annex.branchable.com/), which is tuned for that
         | kind of mostly-offline use case.
        
         | samwillis wrote:
         | Conflict resolution is the issue here.
         | 
         | Effectively sync systems like DropBox and iCloud do this by
         | flagging conflicting edits when you come back online and
         | duplicate files (new a new file name) so there is no data loss.
         | 
         | For a lower level file system though that's not really possible
         | as you may be running databases, or other data models, that
         | need to understand conflict resolution themselves.
        
           | PhilipRoman wrote:
           | For my personal use case I don't really care about conflicts
           | - they could be crudely resolved by a timestamp or even
           | randomly. Having backups in the event of a conflict would be
           | good. Files are never updated incrementally, just added,
           | renamed or deleted.
        
           | em-bee wrote:
           | why would you share a database over a distributed filesystem,
           | other than for backup purposes where you only have a single
           | source so you should never get a conflict?
        
             | BlueTemplar wrote:
             | See cryptocurrencies.
        
       | keybits wrote:
       | I'm excited about ElectricSQL as an enabler in this space:
       | https://electric-sql.com/docs/overview/technical-intro
       | 
       | They're using SQLite on device with a sync service online. Their
       | team have credentials that give me confidence: https://electric-
       | sql.com/about/team
        
         | britannio wrote:
         | I have high hopes for ElectricSQL given that the co-inventors
         | of CRDTs are on the team! It's like building a generative AI
         | startup with authors of the transformer paper.
        
           | thruflo wrote:
           | Thanks! We've just opened up a call for design partners[0] if
           | you (or any teams out there) might be interested in
           | collaborating with us :)
           | 
           | [0] https://next.electric-sql.com
        
         | yonz wrote:
         | James is speaking at the next local-first meetup.
         | https://lfw.dev
        
       | account-5 wrote:
       | Nearly everything about that article depressed me. I want just
       | offline applications and if I need it in the very limited times I
       | do, opt-in to cloud. All this "everything" is online is bullshit.
        
       | syngrog66 wrote:
       | when I design new software I bias/default to CLI, monolithic,
       | local-hosted, and offline-only, first.
       | 
       | Then only if and when I have a good pressing reason to give it a
       | GUI, or make it client/server, or require connectivity, or be
       | cloud-hosted, do I carry out a refactor/redesign to add those
       | features. And even after I apply the refactor/redesign I strive
       | hard to maintain a UX configuration which retains all those
       | original default qualities. Maintaining them side by side with
       | the added alternate modes.
       | 
       | Maybe its an age/era thing. Because I'm increasingly surprised
       | when folks DONT use this approach. Felt like a design no-brainer.
       | 
       | The private term I've coined for this philosophy is CLIFMO.
        
       | trasz4 wrote:
       | Online is just offline with the caching layer missing.
        
       | ggm wrote:
       | Mike St Johns talked about DNSSEC bootstrap timers in the context
       | of a VM on the shelf, brought live 4+ years later: how do you
       | update the Trust Anchor for a cold VM image which is very old?
        
       | tigerlily wrote:
       | Nah. Offline is online with extreme immediacy. Get out there and
       | DO IT NOW!
        
       | reportgunner wrote:
       | What do we do about timeouts when dealing with extreme latency
       | though.
        
         | realPubkey wrote:
         | Just retry each X seconds. Also browsers have a
         | navigator.onLine property which emits an event at the exact
         | time the client is online again. I am doing this with rxdb and
         | it works great.
        
       | astatine wrote:
       | I would argue that it really is the other way around - online is
       | just offline with instant synchronisation
        
         | em-bee wrote:
         | that's how any SPA should be written
        
       | fastball wrote:
       | I'd go one step further, and say offline is just real-time with
       | extreme latency. This is what we realized when re-tooling our app
       | for offline use - anything we build that enables offline use will
       | by its nature enable real-time collaboration.
        
         | mfbx9da4 wrote:
         | Example? I don't see the link
        
           | arve0 wrote:
           | When you do not rely on ACID for data consistency, you need
           | to architect for eventual consistency. For example CRDT on
           | collaborative editing a text document.
        
         | pvh wrote:
         | Just so!
        
       | jiggywiggy wrote:
       | With apps I do this. I download the entire rest api. Often 5-10
       | mb.Entire api is versioned, every content update leads to new
       | live version. And app works offline and super fast. Queue the api
       | updates by default. And cache images / videos. Pretty doable. And
       | api is rarely queried.
        
       | jessmartin wrote:
       | If you're interested in this sort of thing, there's a good group
       | of folks who are building local-first libraries and software
       | congregating at https://localfirstweb.dev/
       | 
       | They have had a few meetups so far which have been really good
       | (including PVH speaking at the first one). And many of the local-
       | first builders are hanging in their Discord.
        
       | chrismorgan wrote:
       | Sometimes you can tell that you're offline. Sometimes you can
       | tell that you're online. The real trouble is when you have an
       | _unreliable_ connection. That's the worst of all available
       | worlds, when systems fall apart in a wide variety of troublesome
       | ways.
        
         | genewitch wrote:
         | oh, like my starlink. I can't use it for VoWiFi, because it
         | drops for a couple seconds every minute. So i use it to
         | download, only. It also works for any VoD streaming service
         | (youtube, netflix, etc), but will not work for live streams.
         | Can't use it for gaming, then again with CGNAT on my main ISP i
         | can't use _it_ for gaming really, either.
         | 
         | However stuff like matrix works fine on starlink, because it
         | will eventually be able to phone home and do all of the queued
         | transfers, and that's fine.
        
       | karanveer wrote:
       | damn bruh, you just opened my eyes
        
       | lucasyvas wrote:
       | This resonates a lot but there are substantial issues with
       | offline-first for many apps, like permissions.
       | 
       | Maybe a simpler way to put it - if what you are building requires
       | client/server for security guarantees, cloud is IMO an easier
       | delivery model than forcing your customer run their own database.
       | Cloud is infinitely better operationally for these users.
       | 
       | If they want to control the versioning, then on-prem is the
       | answer.
       | 
       | If permission modelling is no issue, offline first plus sync is
       | optimal I think.
        
       | fnordpiglet wrote:
       | This seems to miss the fact that the cloud providers basic
       | service is a highly discoverable highly available way of
       | advertising endpoints and managing highly durable and resilient
       | state in a distributed system. Yes you can do that locally. It's
       | just really fragile and difficult. The ability to collaborate
       | between two local machines by using a well known service remotely
       | that's always available means even when the neighboring laptops
       | lid is shut and reopened things work because the only real
       | dependency that laptop has was its tcp stack. The other laptop
       | doesn't have to deal with the interruption, try to figure out
       | when it's come back online, renegotiate connectivity, figure out
       | any state drift and reconcile state, etc etc. Bonus is it works
       | the same when you take your laptop to the bathroom to take a crap
       | as it did when it was 2ft away. I'm not even going to go into the
       | pitiful state of adhoc local protocols and hardware stacks.
        
       | throwawaaarrgh wrote:
       | Does your laptop have 200 terabytes of memory, 50 petabytes of
       | storage, and 10,000 CPUs? No? Then it's not really the same thing
       | is it?
       | 
       | There are things you can never do on your laptop. Offline is
       | limiting, in many ways. You know how I know? I grew up in the
       | 90s. Online is a magical godsend of capability and functionality.
       | Offline is cute. Online is what we dreamed of.
       | 
       | Should you have offline modes? Of course. Should you have some
       | offline-first applications? Of course. Is offline just online
       | with extreme latency? Of course it isn't. Use your brain.
       | _Think._
        
       | mpweiher wrote:
       | Funny, I think _online_ is just offline with extreme latency and
       | variance...
        
       | glonq wrote:
       | On my last project, we built a configuration/collection tool for
       | sensors installed in remote locations. For certain operations,
       | our failure mode was "the user will have to go online so the app
       | can resolve things, then can go back to the remote location and
       | try again".
       | 
       | After folks explained that this could require a multi-day, multi-
       | tens-of-thousands-of-dollars journey for the customer, we re-
       | architected parts of the system to be _tolerant of offline
       | failures but still resilient and secure_ and saved the customer a
       | potential round trip back to the field.
        
       | toolslive wrote:
       | Yes and storage is just a high latency message to yourself in the
       | future. This means everything that is in use in high latency
       | communications can be used for storage.
        
         | faxmeyourcode wrote:
         | Reminded me of this SIGBOVIK paper - "Harder drives: hard
         | drives we didn't want or need"
         | 
         | http://tom7.org/harder/\
        
           | Joker_vD wrote:
           | Okay, that section on chainsaws was brilliant, and is somehow
           | the sanest part of the paper: the following text gets
           | progressively crazier.
        
       | eur0pa wrote:
       | No?
        
       | 6367529256 wrote:
       | [flagged]
        
       | croes wrote:
       | He is not talking about offline applications but online
       | applications with offline functionality.
       | 
       | Since the rise of cloud applications and electron based
       | applications I'm back at writing faster than the application can
       | process my input. And I'm not a fast typist.
        
         | hgsgm wrote:
         | "online applications with offline functionality" or "offline
         | applications with online functionality"?
         | 
         | In the nitty gritty they are the same thing, but the way you
         | say it changes the way you picture it and what parts you make
         | sync vs async
        
         | capableweb wrote:
         | > Since the rise of cloud applications and electron based
         | applications I'm back at writing faster than the application
         | can process my input. And I'm not a fast typist.
         | 
         | If the application you're using (the one(s) you're referring to
         | when you say "cloud applications") is sending the key input to
         | the backend and waits to render it client-side until it
         | received a response, it's doing something horribly wrong and if
         | that's how they write things, you probably want to avoid that
         | for a multitude of reasons. Please name and shame though, so
         | others can avoid it too :)
         | 
         | Same goes for Electron-based applications, there is no reason
         | they'd block showing the text you inputted, and if they just
         | use <input/> without doing anything egregious, you really
         | shouldn't be able to type faster than characters appearing on
         | the screen, something is really, really wrong then, and I don't
         | think it's because of Electron.
        
           | Hackbraten wrote:
           | 1Password's new UI does just that. I enter some text into a
           | field quickly, hit Tab, then watch some of the trailing
           | characters (or the entire field content) disappear. This
           | keeps occurring and disgusting me to no end.
        
             | marcellus23 wrote:
             | This is why I'm sticking with 1Password 7. They can pry it
             | from my cold dead hands.
        
           | alpaca128 wrote:
           | VS Code is still much slower than necessary despite editing
           | files locally - on my Thinkpad from 2016 I got extremely
           | inconsistent input latency that felt like a shaky SSH
           | session, in better cases it seems to be closer to 30ms[0].
           | For reference: gVim's latency hovers around 1ms and even
           | intelliJ can still be 10x faster[1].
           | 
           | [0] https://github.com/microsoft/vscode/issues/161622#issueco
           | mme...
           | 
           | [1] https://pavelfatin.com/typing-with-pleasure/#windows
        
           | croes wrote:
           | It's more if I edit data grids or multiple fields where I
           | switch between them with the tab key.
           | 
           | On desktop applications they may lack in the response on the
           | screen if they or the computer are to slow, but with cloud
           | apps sometimes keystrokes go missing and the entered data is
           | in the wrong field.
           | 
           | The operating system recognises all keystrokes, but the
           | browser seems to skip some.
        
           | doix wrote:
           | > If the application you're using (the one(s) you're
           | referring to when you say "cloud applications") is sending
           | the key input to the backend and waits to render it client-
           | side until it received a response
           | 
           | I'm 99% sure nobody does that, that would be insane :D.
           | 
           | It's most likely caused by React and the use of controlled
           | input components without thinking about performance. If your
           | input sets it's value from React state, then you're updating
           | the state on every keypress and re-rendering the component.
           | In the most simple case, it's probably fine. But depending on
           | your component hierarchy, it's pretty easy to end up in
           | situation with over 50ms of typing latency.
        
             | capableweb wrote:
             | > I'm 99% sure nobody does that, that would be insane :D.
             | 
             | I agree, hence the surprise!
             | 
             | Although parent explicitly calls out "cloud applications"
             | so I'm guessing online has something to do with it.
             | 
             | And in the context of online/offline, it wouldn't matter if
             | it's internet connected or not, using controlled input
             | components with state changes going through a deep
             | hierarchy would introduce that sort of delay no matter if
             | you're online or offline.
        
             | TeMPOraL wrote:
             | > _I 'm 99% sure nobody does that, that would be insane
             | :D._
             | 
             | I imagine you haven't seen how people implement
             | autocomplete on web forms ;).
        
           | tsbischof wrote:
           | I issues with Outlook Web App (M365) often. Dropped
           | characters are not so common, but it is common for the cursor
           | to bug out and insist on returning the to start of a line
           | with each new character.
        
             | tonyarkles wrote:
             | Are you using Firefox? I had that problem consistently with
             | OWA, but I recently switched to primarily Safari on an old
             | MacBook and don't recall having it happen recently.
        
           | pards wrote:
           | > Please name and shame though, so others can avoid it too :)
           | 
           | MS Teams does this when starting a new chat - you select the
           | recipient and start typing and Teams will do two unexpected
           | things shortly afterwards:                 1) Clear the text
           | you typed, and       2) Reset the cursor to the start of the
           | line
        
             | mxuribe wrote:
             | And this is one of the many reasons why i very much dislike
             | MS Teams!
        
           | remram wrote:
           | Gmail has had this issue for years, if you type in the search
           | bar a bit fast or the system is a bit busy, some of your key
           | presses will trigger keyboard shortcuts and randomly
           | select/archive/mark as read/open emails in the current view.
           | This is maddening because you can end up missing emails
           | completely as there is only a single level of undo.
        
           | postdb wrote:
           | Seen that on mattermost, it is poorly written React or other
           | SPA. It is one of reason why SPA get so much hate around.
        
         | heyoni wrote:
         | I think that's the take and from my own experience, it kind of
         | sucks and feels like we're running worst versions of basic
         | software than we used to (old man rant?).
         | 
         | For example, I use Apple Music every time I leave my apartment.
         | Put my headphones on and start some music. All my songs are
         | downloaded locally so it should be fine, however, as soon as I
         | close my front door until after I step off the elevator, no
         | music will even attempt to play. That's because Apple Music is
         | blocking itself on some sort of network call/drm check because
         | it thinks I'm online and it should work.
         | 
         | If I go into airplane mode and hit play, everything works
         | perfectly.
        
       | [deleted]
        
       | gadders wrote:
       | My pet peeve are mobile apps that work with good connectivity
       | (mobile or wifi), and also work with no connectivity at all, but
       | when there is patchy connectivity take a minute or so to decide
       | which mode to work in. Spotify I'm looking at you. Especially on
       | screens that absolutely should not need to request data from the
       | server to render information.
        
       | ilrwbwrkhv wrote:
       | Rxdb pouch and couchdb. All forgotten tools to build wonderful
       | offline products.
        
       | 6367529256 wrote:
       | &#^
        
       | eric-burel wrote:
       | "Build-time rendering is just pre-computed request-time
       | rendering" lead to a whole lot of innovations in the JavaScript
       | ecosystem and allowed a continuum of intermediate approaches to
       | emerge
        
       | 0zemp1c wrote:
       | yeah, no
       | 
       | offline means no expectation of a response, that is very
       | different than an extremely delayed response
        
         | mysterydip wrote:
         | Like saying "blindness is the same as a really long blink". One
         | has an expectation of seeing again, the other has no
         | guarantees.
        
         | imadj wrote:
         | The point is to bridge online and offline and make apps more
         | robust
         | 
         | If it works locally and there's no need for syncing or
         | communication in the first place then yeah, problem solved!
        
       | frereubu wrote:
       | The older I get, the more skeptical I get about any article /
       | comment / whatever that uses the word "just" in this way. "X is
       | just Y", "Do do X you just need to do Y". It's almost always a
       | trite oversimplification to an extent that it falls apart as soon
       | as you start thinking about it in detail - as the comments here
       | suggest.
        
       | mfbx9da4 wrote:
       | I don't think "Offline Is Just Online with Extreme Latency" is a
       | useful concept because it doesn't encapsulate the key difference:
       | pessimistic or optimistic UI.
       | 
       | For example, say you have a form. If you built it thinking online
       | first you'll probably have some pessimistic UI which shows a
       | spinner and waits for the server to respond with ok/error. You
       | can't simply think, okay since we're offline, more latency ->
       | show spinner for longer. You have to re-architect things so that
       | the UI is optimistic, commits to a local database and that local
       | database is synced up to the server when you come online.
       | 
       | In my experience optimistic UI is way more complex to build. Many
       | times the complexity is worth it though.
        
         | Lio wrote:
         | I think you've got it spot on.
         | 
         | I've also worked on systems like that where a mobile user could
         | loose connection at any time and they are indeed very complex
         | to get right.
         | 
         | I'm not sure there's a perfect way to do it but we ended having
         | have certain functions that had to be done online and others
         | where the user built a "request" for service that was handled
         | optimistically with failures sent to the user's inbox later.
        
         | homero wrote:
         | You'd have to make sure the user knew whether it finally worked
         | even weeks later or never sent. They'll forget.
        
         | hyperhopper wrote:
         | Abstracting this away from the user is what meteor was built to
         | solve, and did it very well for most use cases.
        
         | danenania wrote:
         | The really hard part is conflict resolution. You updated
         | something 5 times while offline, but another user deleted that
         | something between updates 2 and 3, or made a divergent update
         | of their own. There are so many potential scenarios like this
         | in a multi-user app. It's a huge rabbit hole, and you can end
         | up in situations where it's impossible to sync in a user-
         | friendly way. Essentially you are taking on all the challenges
         | of distributed databases. _Maybe_ it 's worth it, but you
         | should know what you're getting into.
        
           | giantrobot wrote:
           | Online-only collaboration systems already have to do this.
           | The local view has to synchronize state between other local
           | views and the canonical version on the server. Offline
           | changes _are_ online edits with high latency.
        
             | danenania wrote:
             | Yes, but the problem gets much harder to resolve the longer
             | you allow client states to diverge.
        
         | treeman79 wrote:
         | Was required to use a MS sql server database for a project that
         | would go offline for 5-10 minutes every hour. (Getting admins
         | to fix it was a no go).
         | 
         | Now of course I was judged on uptime of my app that relied on
         | it.
         | 
         | Finally just cloned the data to a local MySQL and refreshed
         | data frequently. Database team totally clueless that app
         | servers were hosting their own databases.
        
         | thomastjeffery wrote:
         | Sounds like it _is_ a useful concept: you just used it to
         | introduce your own.
         | 
         | I think that optimistic UI isn't _more complex_ to build: it 's
         | just _less familiar_.
         | 
         | In a broader sense, UI/UX design culture places _way_ too much
         | focus and value on familiarity.
         | 
         | The best UI/UX designs I have ever experienced are when
         | software design _diverges_ from the norm and tries a new
         | approach.
        
           | stepbeek wrote:
           | > I think that optimistic UI isn't more complex to build:
           | it's just less familiar.
           | 
           | Having multiple records of state that have to be resolved
           | when systems come online is complex. Anything requiring
           | consensus is difficult to do.
        
             | thomastjeffery wrote:
             | The same complexity is present in both approaches. The only
             | difference is cadence.
        
         | Karellen wrote:
         | > You have to re-architect things so that the UI is optimistic,
         | commits to a local database and that local database is synced
         | up to the server when you come online.
         | 
         | Isn't that exactly what the article argues for though?
         | 
         | > This kind of idea would move you away from a product full of
         | API calls to one based on data synchronization.
        
         | friendzis wrote:
         | I agree with the sentiment, but for entirely different reasons.
         | 
         | An offline capable application that sometimes tries to sync can
         | be called "Online with Extreme Latency", but that is not what
         | true ~~Scotsman~~ offline is.
         | 
         | Offline/online is first and foremost about data locality and
         | data ownership. In an online application (regardless of
         | latency!) the source of truth is "the server". Offline
         | application itself is the source of truth and "the server" is a
         | slave.
         | 
         | The OP seems to be talking about thin vs fat clients. Fat
         | client is still a _client_ - it fetches data. Offline
         | application is the data source for  "the server", it's the
         | server that has to adapt to local changes not the other way
         | around. Naturally, this is problematic since now you have
         | multiple sources of truth. However, shifting source of truth to
         | "the server" does create online application with extreme
         | latency - fat client.
        
           | foobazgt wrote:
           | I believe thinking about it as "offline vs online" obscures
           | what's actually difficult about offline operation. It's not
           | storage or ownership of data that's difficult, it's conflict
           | resolution.
           | 
           | The longer you're disconnected, the more things diverge, the
           | better your merging/resolution schemes/algorithms need to be.
           | 
           | There are a lot of ways of thinking about and approaching the
           | problem, some of which work worse or better under different
           | circumstances. You see it in distributed consensus, multi-
           | master systems, version control systems, etc.
           | 
           | There's ongoing work in the form of things like operational
           | transforms and CRDTs, but clearly their needs to be a lot
           | more progress in the area.
        
           | forgotmypw17 wrote:
           | A lot of it is also about accessibility to someone with
           | limited network access.
           | 
           | When you are developing with an always-on connection and a
           | high-performing device, it's easy to ignore all the scenarios
           | where someone doesn't have either one.
        
             | dopidopHN wrote:
             | There is tool to mimic that : the venerable "Charles" proxy
             | for instance.
             | 
             | But I think it's part of webTooling in the browser
        
           | jchanimal wrote:
           | I think I agree with the analysis. It's why aspects like data
           | verifiability are potentially more important than fancy peer-
           | to-peer routing and transfer protocols. Once you have Merkle
           | proofs of data, it's just as powerful whether it is on the
           | client or server.
           | 
           | Cryptographic verifiability make data locality into an
           | optimization problem not a trust problem:
           | https://fireproof.storage/documentation/how-the-database-
           | eng...
        
             | Karrot_Kream wrote:
             | Trust and anti-corruption are just two of many properties
             | you need for data locality, arguably less important.
             | Conflict resolution or consensus is still very, very
             | difficult. P2P routing and transfer is a bit of a red
             | herring. You still need consensus between your local store
             | and the remote store. Fireproof does it using IPFS
             | underneath which in my experience tends to be quite slow,
             | but is a working solution.
        
           | hinkley wrote:
           | An app I was designing about six years back would have been
           | something that some would use in their yard and others would
           | use in a national park.
           | 
           | In the yard you have extreme latency. Sooner or later you'll
           | get thirsty and you'll walk into WiFi distance.
           | 
           | In a national park there's no connectivity. You won't be able
           | to get or receive anything until long after the moment has
           | passed. None of the answers you get will be relevant anymore
           | for most people (what percent of people who visit a national
           | park visit the same one over and over again?).
           | 
           | Then I realized screen contrast wasn't 'there' yet so I
           | shelved it, got busy, and there it remains collecting dust.
        
           | inferense wrote:
           | > Offline/online is first and foremost about data locality
           | and data ownership.
           | 
           | not necessarily if the data is stored in a proprietary
           | format.
        
             | tnel77 wrote:
             | Yes, but I think most people care about availability of
             | data over true ownership of data.
             | 
             | If I'm running a business and my internet goes out, there's
             | a huge selling point to a local DB that allows my
             | operations to keep chugging along until Comcast figures out
             | their mess. Internet returns, my DB syncs with a server
             | offsite, and now I have that backup.
        
             | Sakos wrote:
             | It doesn't matter if it's a proprietary format. Proprietary
             | formats can be reverse engineered and modified and
             | converted. There is a world of difference between a
             | proprietary file that I have online in a form that I can't
             | access directly (and I have no idea how it's being
             | accessed, changed or stored by the service itself or third
             | parties) and a file that I have on my harddrive that I have
             | complete control over.
        
             | [deleted]
        
           | kdmccormick wrote:
           | Isn't that more like "decentralized vs centralized" though?
           | In my experience talking with coworkers about online vs
           | offline apps, the article's definition is what we use.
           | Granted, I've worked exclusively in Web dev for years so
           | maybe it's all contextual.
        
             | JohnFen wrote:
             | I don't view things like the article states, and I likely
             | won't for a number of reasons other commenters have stated,
             | plus one more:
             | 
             | If offline is online with with extreme latency, then
             | "extreme latency" must include "infinitely long latency".
             | But accommodating infinitely long latency requires a
             | different approach than if you assume that a server will be
             | contacted at some point.
        
           | Scubabear68 wrote:
           | A good example of this is are mobile applications used in
           | logistics for tracking movements within a terminal. Often the
           | wifi environment is terrible and the operators will spend
           | significant time not connected. They often have fat clients
           | with local storage, and when the reconnect the sync
           | bidirectionally - they upload whatever they have done since
           | last connection, and they download changes others have made
           | that may affect them in the meantime.
        
         | klabb3 wrote:
         | Those cases should both be solved with optimistic UI, so
         | there's no difference.
         | 
         | You can have a little checkmark to indicate that it's synced,
         | like many chat apps do.
         | 
         | > In my experience optimistic UI is way more complex to build.
         | Many times the complexity is worth it though.
         | 
         | Yeah, can attest to this. I'm working on an app[1] that strikes
         | the trifecta: p2p, real-time and offline first. All of those
         | things combined makes the amount of tooling, design patterns
         | and resources available shrink to a tiny sliver compared to a
         | typical web-based tech stack. I have researched probably 100
         | projects that sound promising but almost all have been a poor
         | fit for one reason or another. I opted to build almost
         | everything from scratch.
         | 
         | Kudos to the JS ecosystem. They are way ahead in this space,
         | with rxdb, watermelon, yjs, automerge etc. Unfortunately I
         | couldn't use any of them because I use a split-language stack.
         | 
         | [1]: https://payload.app/
        
           | silvestrov wrote:
           | When you need a single source of truth you cannot use
           | optimistic UI.
           | 
           | E.g. if the user is a realtor, then she can't tell the
           | customer "you have now bought the house" if there is no
           | online connection and you're waiting for a sync. You can fill
           | out and upload the form async, but commitment must be online.
           | 
           | You cannot tell the customer "you might have (or might not
           | have) bought the house, we will only know later".
        
             | thruflo wrote:
             | You can if you acquire a distributed lock in advance, as
             | per https://electric-sql.com/blog/2022/05/03/introducing-
             | rich-cr...
        
             | chefandy wrote:
             | That's true even if you're example isn't perfect. Some
             | types of transactions have business requirements that
             | demand immediate consistency or responses.
             | Contraindications certainly don't invalidate ideas, though.
             | Use the right to for the job.
        
             | BrentOzar wrote:
             | > You cannot tell the customer "you might have (or might
             | not have) bought the house, we will only know later".
             | 
             | Sure you can - in fact, that's what realtors call offers.
             | You place an offer, and you only find out later if you
             | bought the house, often _days_ later.
        
               | [deleted]
        
               | couchand wrote:
               | Technically correct, but you're missing the point.
               | 
               | Eventually you do need to be able to commit some sort of
               | transaction and get confirmation from the counterparty.
        
               | ElevenLathe wrote:
               | This is correct but you can do tricks to change who the
               | counterparty is, which is often useful. If, instead of
               | putting up a yard sign and saying "this house is for
               | sale" and waiting for someone to come by and complete the
               | transaction, the homeowners entered a contract with a
               | brokerage to sell the house to anyone who is willing to
               | abide by a list of terms (minimum price, occupancy date,
               | etc.), then the brokerage can respond immediately and say
               | "great, the house is yours". This is essentially the
               | equivalent of sending a sell order to a stock broker.
        
             | smac__ wrote:
             | In this case the optimistic UI might be good to have a step
             | like "this request is pending". So when the form is
             | submitted the data is ready to send and will send when it
             | can. Ideally with an indicator that the user is offline and
             | needs to be online to sync.
        
           | dustingetz wrote:
           | to add to this -
           | 
           | rotate CRUD mindset to CQRS, now you have a start event and
           | an end event, this is the extent of the pending sync state
           | which can be afforded to the user at any granularity -
           | document level, message level, form or field level, etc.
           | 
           | The cost is that other view queries don't reflect the pending
           | event, only the view that issued the command has an
           | association to the event. Which is usually the UX you want.
           | Consider a master/detail form app where you insert a new
           | record into a collection, but the view is
           | sorted/filtered/paginated and your new record does not match
           | the criteria and therefore vanishes. That is never the right
           | UX. A less surprising alternative UX is to limit record
           | creation to a specific form for the business rules of
           | creation, and that form exists in the context of a specific
           | collection view with business rules around newly created
           | entities of that kind, with an invariant that newly created
           | entities will always appear at the top or bottom of that
           | collection (e.g. new messages are always added to the bottom
           | of the chat history view). Now the optimistic update bypasses
           | the database and simply writes through to the view
           | optimistically and then when the ack is eventually received
           | it seamlessly changes state without any UI jank.
           | 
           | Now you can send many new messages rapidly and if the nth
           | message fails and the rest of the messages went through you
           | get a properly located error. With a CRUD mindset, probably
           | the form is simply disabled until each individual insert
           | succeeds - which means your chat app cannot keep up with you
           | typing!
        
           | realPubkey wrote:
           | Related: https://rxdb.info/offline-first.html
        
           | Joker_vD wrote:
           | > Those cases should both be solved with optimistic UI, so
           | there's no difference.
           | 
           | Ah, yes, "in theory, the theory and the practice are the
           | same". Unfortunately, in practice, the theory and the
           | practice are _not_ the same, and those cases are regularly
           | _not_ solved with optimistic UI (even though they should), so
           | there is difference.
        
             | hinkley wrote:
             | Git has one interface for disconnected commits and another
             | one for connected ones. Most of the command set is
             | bifurcated around this. Sure there are places where you do
             | the same act for local and remote but those are more the
             | exception than the rule. It's very exposed. They've done
             | very little no create any sort of abstraction across them,
             | and that's probably the right answer.
        
               | TylerE wrote:
               | Ugh. This makes me very sad. Git is a ux disaster, and my
               | gut instinct when realizing I was doing the same thing as
               | git would be to seriously question my thought process.
        
           | benatkin wrote:
           | First I heard of "optimistic UI" was with GraphQL and Apollo,
           | but I had seen the behavior that they someone, perhaps them,
           | gave this name for a lot before.
           | 
           | I don't find the concept "optimistic UI" to be more useful
           | for talking about it or the implementation by Apollo to be
           | more elegant. It's fine but it doesn't solve any problem
           | except one that was created by Apollo's binding of server
           | data to the client, React-style.
        
         | simplotek wrote:
         | > You have to re-architect things so that the UI is optimistic,
         | commits to a local database and that local database is synced
         | up to the server when you come online.
         | 
         | I'm not sure you got the point. The design guideline that
         | "Offline Is Just Online with Extreme Latency" already reflects
         | very specific architectural requirements, and state transitions
         | in the application life cycle. We're talking event-driven
         | architectures, batching events, flushing events in
         | offline/online transitions or even when minimizing windows,
         | pulling events when going online, etc etc etc.
         | 
         | I'd go even further and claim that this whole "pessimistic vs
         | optimistic UI" thing is just "adequate vs broken UI
         | design",regardless whether the app is even expected to go
         | online.
        
         | saltcured wrote:
         | A related concern would be surfacing the "online" part as
         | explicit resources and actions for the user instead of
         | implicit, background magic. If you are sufficiently offline in
         | your lifestyle, you need to plan your communication phases.
         | 
         | I recently got into using a GPS sports watch. It is the kind of
         | thing I would want to use in an offline fashion, i.e. go
         | somewhere off the grid and track my hikes or bike rides. These
         | devices are designed to function offline for a stretch of time,
         | but they have a requirement to eventually sync to an online
         | system. They will eventually fill up with recorded sensor data
         | and you want to offload that somewhere else before clearing
         | local device storage. More importantly, satellite positioning
         | receivers need a cached "ephemeris" file that helps them
         | predict which satellites will be overhead at a given time to
         | operate efficiently, accurately, and quickly.
         | 
         | Unfortunately, the manufacturers have been infected with
         | smartwatch expectations. They started designing it as if it is
         | always online, and the syncing functions are implicit
         | background behaviors. When doing sporadic syncs and going back
         | offline, it is hard to influence it to "get latest ephemeris"
         | when you known you have internet connectivity and will be going
         | offline again. Worse, these results are localized and it
         | implicitly gets ephemeris for its current location. The UI
         | doesn't allow you to indicate a destination and pre-load the
         | right data to allow fully offline function on arrival.
        
       | titzer wrote:
       | FTA:
       | 
       | > Unfortunately, some of the open technologies for building more
       | local-first, p2p applications just aren't there yet. Like Peter's
       | point on webRTC.
       | 
       | I guffawed at this. I mean, seriously. In the days before the
       | internet was widespread, like mid-90s, there were actually multi-
       | player games that worked over LANs, both IP and IPX. Somehow,
       | people were able to configure multiple computers to talk to each
       | other with this funny numbers called "addresses" or something.
       | DNS existed of course, but you could also add to /etc/hosts,
       | Novell had a thing, everyone had a thing.
       | 
       | The problem is that somewhere around the mid 2000s or early 2010s
       | we _forgot_ that anything networking-related could be based
       | around non-web protocols and stacks. What a disservice we 've
       | done ourselves.
       | 
       | Not that I'm advocating people type in IP addresses or have to
       | set up their own DNS servers or admin their own LANs, but wow,
       | it's like part of our collective brains is just missing.
        
         | nebulous1 wrote:
         | > In the days before the internet was widespread, like mid-90s,
         | there were actually multi-player games that worked over LANs,
         | both IP and IPX. Somehow, people were able to configure
         | multiple computers to talk to each other with this funny
         | numbers called "addresses" or something.
         | 
         | In the scheme of things very few people were able to set this
         | up. It's definitely unfortunate that so much software no longer
         | works without a server component you dont control, but one of
         | the major reasons for it is that the typical user can now do it
         | because they don't have to set up the networking or understand
         | much about it. A little later software companies realised
         | they'd actually rather keep control and stopped distributing
         | the server component at all.
        
         | Spivak wrote:
         | The bar is higher now which is what has really changed. Your
         | thing has to work on every network, through multiple levels of
         | NAT, without copy-pasting ip addresses or updating system
         | files, often across multiple platforms.
         | 
         | WebRTC is the focus because it won by a huge margin, other p2p
         | protocols are a footnote. Everything uses WebRTC whether it
         | actually has a web client or not.
        
         | hgsgm wrote:
         | What happen is that dads realize that it's easier to write ,
         | maintain, and monetize multi-client software that runs
         | primarily on the dev's computer and pushes some of the UI to
         | the client, than multi-client software that runs primarily in
         | the client computers.
        
         | fnordpiglet wrote:
         | I think it's more than forgetting. I didn't forget for sure.
         | But what is easily forgotten is _why_ we moved from local p2p
         | to internet brokered services. It's mostly simplicity. By
         | hosting all the state and discovery, match making, etc, in a
         | remote service outside the local network and RF environment,
         | you dramatically simplify everything to "configure the local
         | tcp stack." The 50's-2010 world wasn't awesome and things were
         | super fragile, tedious, poor compatibility, etc etc. The move
         | to service based approach meant protocols were homogenous and
         | compatible, implementations were simple, state management easy,
         | reliability near perfect, etc. You even get to ensure everyone
         | has basically the same software since all the real software is
         | in the service and there's exactly one version on earth. In the
         | bad old days you referred to, every device around you had some
         | ragged edge version dependency graph of everything from the
         | device to its network card through to the end user experience.
         | It was a miracle anyone ever played Red Alert on the LAN.
         | 
         | People always talk about "how expensive" it is to send packets
         | to Oregon to turn on your lightbulb in seattle. But the cost is
         | already fully loaded and paid for. If you didn't notice it,
         | maybe that's because it's actually not more expensive? Yes
         | latencies are higher, and that's literally the only downside I
         | can imagine. But it is a lot more reliable, flexible, simpler
         | to deploy in any environment, robust.
        
           | titzer wrote:
           | > It's mostly simplicity.
           | 
           | You make points below that are good, but let's be clear.
           | You're talking about simplicity of interop and configuration
           | that's gotten better, rather than simplicity of the software
           | stack. There are so many variables that have changed by
           | adopting the web stack that I don't think any other dimension
           | of simplicity has been achieved.
           | 
           | If we had instead focused networking protocol design on the
           | simplicity of configuration, discovery, and naming, then we'd
           | have been better off. It's not like you need an electron
           | stack, an apache stack, and a cloudy (planet megascale!)
           | datastore for that.
        
             | fnordpiglet wrote:
             | I think the simplicity story is more than that. First,
             | state management is a tricky thing to do in any
             | environment, but in an environment of a billion random
             | variables it's tedious if not impossible. I'd assert that
             | each of those complexities you highlight are actually
             | _solutions_ to a specific challenge in peer to peer
             | interaction between computers that are _simpler_ in the
             | aggregate than if they didn't exist and we had just focused
             | on, say, making Bluetooth not be a massive annoyance. The
             | ability to simply ensure a tcp stack is configured then be
             | done with the entire end to end problem of peer to peer
             | collaboration across platforms, devices, stacks, local RF
             | environment, LAN configuration, and it includes durability
             | and available assurances, etc, are enormous.
             | 
             | I also think it's kinda not true that protocols have stayed
             | stationary in that time. Certainly Bluetooth has improved,
             | there's lot do innovation on small device adhoc networks,
             | there even a lot of innovation on internet protocols over
             | the last 5 or so years. My observation (having been at
             | Netscape at the time) was the real demise of network and
             | internet protocols until late was the MSFT destruction of
             | Netscape. We were a huge driver of protocol innovation and
             | had demonstrated there's gold in them thar networks. We
             | hired a lot of protocol and standard developers and built
             | products that implemented as close as our talent allowed to
             | the spec. It was a heady time. Microsoft realized at the
             | time this push really threatened their core business model.
             | They so publicly and roundly pwn'ed us out of existence
             | that it created a massive chill in anything internet tech
             | related (most of us went into e-commerce as a result). It
             | wasn't until sort of recently Google self servingly started
             | bullying standards out the door that things sort of
             | unwedged again and despite the kind of sad way Google
             | primed the pump, things are really exciting right now on
             | the internet.
             | 
             | I'll note that our Mozilla play was a really important
             | effort on our part to ensure that culture we had built
             | around open internet standards and technologies could stay
             | afloat into the present. I've been happy to watch Gecko and
             | Xul and others grow from their sapling state to where it is
             | now. It also prevented Microsoft from establishing a real
             | hegemony in internet standards. But most of all, I am so
             | happy to see a real C/C++ replacement candidate emerge
             | (Rust) from that effort. It was a real thumb in Microsoft's
             | eye to one up their $1B free browser anticompetitive play
             | with taking our then worthless IP and establishing a long
             | lived foundation around it.
        
       | ranting-moth wrote:
       | It's worth mentioning that the blog's author is not an expert on
       | the matter. I really don't agree with the title or the article.
        
       | dccoolgai wrote:
       | There is _one_ thing that can allow "two machines in the same
       | room to talk to each other without sending a request to a server
       | farm in Virginia". It does require the _first_ request to
       | populate the app: Web Bluetooth. Unfortunately it's only
       | implemented in Chrome,but it does work.
        
         | realPubkey wrote:
         | P2P in browser was improved a lot in the past years. Your two
         | machines could now connect via WebRTC and then send data to
         | each other directly, no need for bluetooth. This works great
         | and has a low latency. With rxdb you could even realtime-sync
         | the whole application state [1] without connection to a server
         | farm in virginia.
         | 
         | [1] https://rxdb.info/replication-p2p.html
        
         | pvh wrote:
         | We tried Web Bluetooth in a project. It was extremely flaky.
         | Notably it also only works as a server, so you cant peer two
         | browsers over it either.
        
       | gspencley wrote:
       | What's old is new again.
       | 
       | Remember when there was no "cloud" and just locally executing
       | software with local persistence?
       | 
       | I want very much to return to that. There are a few use cases for
       | me, personally, where SaaS / "the cloud" makes sense but for 99%
       | of what I use a computer for, I want local only. I don't want my
       | application to require an active Internet connection. I don't
       | want it sending data to someone else's computer. Probably most
       | importantly, I don't want the software that I pay for to change
       | on me without my direct opt-in.
       | 
       | The fact that we have articles about offline-first, cloud is
       | "optional" is hilarious when this was just normal every day
       | software only a few short years ago. I can't stand how trend-
       | happy our industry is. "The Cloud" and "SaaS" solved a few
       | problems for a few people ... but we went all in as if there were
       | no alternatives and those of us who don't require mobility and
       | would prefer that we can choose when to "upgrade" and what data
       | to "share" were left behind.
        
         | beebmam wrote:
         | I keep seeing this argument here but I just don't buy it. Most
         | companies don't want to operate all the infrastructure they
         | need to run their core workloads. Managed cloud services are
         | such a massive boon to small to medium sized companies. They're
         | great even for large companies for many scenarios.
        
         | JohnFen wrote:
         | > Remember when there was no "cloud" and just locally executing
         | software with local persistence?
         | 
         | Remember it? That's still my reality, because for almost
         | everything I do the cloud and SaaS are not good solutions.
        
         | j45 wrote:
         | The irony of many libraries and frameworks trying to recreate
         | the offline-first syncing and replication that Lotus Notes had
         | more or less solved should be better known.
         | 
         | Bonus points for the irony of LotusScript being ECMAScript,
         | which is also JavaScript.
         | 
         | Oh, and Notes generating the native app as a web app natively
         | was pretty fluttery.
         | 
         | I have to stop, because I can no longer remember why people
         | were switching away from Notes so furiously. And there was
         | probably a good reason like IIS.
         | 
         | NotesSQL was a great little ODBC driver to make relational db
         | calls from the NoSQL backend of Notes. Many folks owe their
         | sharpness in the universal standards of ANSI SQL to get data
         | ported to MySQL.
         | 
         | Edit:
         | 
         | https://en.m.wikipedia.org/wiki/HCL_Domino
        
         | JakeAl wrote:
         | I miss offline readers. Push a button, download a payload of
         | data updates, read it all offline.
        
         | hunterloftis wrote:
         | I fondly remember locally-executing software with local
         | persistence by default.
         | 
         | To provide a counterpoint, though, during that time my entire
         | family shared one desktop PC. Looking around me, right now:
         | work macbook, personal linux laptop, smartphone, steam deck. I
         | suspect that the workflows that were "fine" in 1995 would
         | really wear on me today. Especially the ones that involve
         | migrating documents from place-to-place for collaboration while
         | trying to maintain a canonical master copy somehow.
         | 
         | Today, because of de-facto reliance on the cloud, "setting up"
         | a new machine - regardless of its OS - takes me about 20
         | minutes. If my laptop fell off of my bike, that would suck, but
         | I wouldn't irretrievably lose important data.
         | 
         | There are downsides to the current cloud-first paradigm too, of
         | course. But I don't think it's _all_ downside.
        
           | gspencley wrote:
           | Yeah I never said it was "all" downside.
           | 
           | I never migrated the majority of what I do to "the cloud" and
           | I have multiple devices, laptops etc. in my house. Setting up
           | a new Linux install takes me about 20 minutes. Wouldn't know
           | about Windows. Then again, I probably use way fewer
           | "services" / "apps" than most people. It's funny, I've always
           | been a very tech savvy computer nerd. I've developed software
           | for a living for 25 years. But the older I get and the more
           | the industry changes the less I find I use "modern tech" as a
           | consumer.
           | 
           | I'm also not thinking back to 1995. This all started, in my
           | memory, following the "mobile revolution" at the tail-end of
           | the 00s. That's when more and more software that I use every
           | day stopped selling perpetual licenses and started charging
           | monthly subscriptions. Everything went "mobile first" and
           | "cloud first" and it got more and more persistent as the
           | 2010s went on.
           | 
           | On a positive note, there is some software that used to be
           | inaccessible due to price, like Avid's Pro Tools, that I can
           | now afford thanks to the switch in pricing models.
           | 
           | But even if it took me an entire weekend to set up a new
           | device, I think that I would still prefer that over needing
           | literally everything to have Internet access. It removes the
           | control from me, the user, and places it in the hands of "the
           | corporation." They can change the software without my
           | consent. They can suffer outages (to be fair we can have
           | local hardware failures too but it's under my control which
           | makes a difference). I remember almost returning my PS4 when
           | it required me to connect it to the Internet just to be able
           | to use it on first boot.
        
             | hunterloftis wrote:
             | All good points.
             | 
             | I suspect preferences will hinge on peoples' budgets for
             | personal responsibility. As my non-digital responsibilities
             | have increased, I've found it nice to be able to delegate
             | to "the cloud" - even at the loss of independence &
             | control.
             | 
             | If there were a personally-owned "cloud" setup, I would
             | prefer that. A box that plugs into my fiber connection and
             | provides the equivalents of the cloud services I use, with
             | data stored locally and backed up automatically to a secure
             | server. A man can dream.
        
               | j33zusjuice wrote:
               | Such a thing exists, but building and maintaining that
               | come at a pretty high cost to your personal time. There's
               | very little that we do in the cloud that doesn't have an
               | on-prem (at home) equivalent. You could even rent servers
               | at a CoLo or something and provide yourself regional
               | resiliency, etc.
        
             | marcosdumay wrote:
             | > But the older I get and the more the industry changes the
             | less I find I use "modern tech" as a consumer.
             | 
             | It may be a "get out of my lawn!!" reaction, but I find
             | modern software distasteful.
             | 
             | I want to use software that enable me to invent and do nice
             | things. Not software that locks me in a pre-designed
             | process. Even if most of the time I don't go inventing, and
             | if the pre-designed process is nice, that difference still
             | sores me.
        
               | rurp wrote:
               | You aren't alone. Open ended systems are usually far more
               | powerful and interesting than rigid ones. I need an
               | extremely compelling reason to even consider picking up a
               | new online-only/saas or similar tool.
               | 
               | Investing time and energy into a tool that can be ruined
               | or lost at any point in the future, or might turn out to
               | be too limited, is a huge risk. It doesn't take getting
               | burned too many times to start getting a lot more wary.
        
         | hbn wrote:
         | I personally like that these days my biggest concern about a
         | computer suddenly dying on me, or getting lost/stolen, or a
         | drive failing is the cost of replacing it. Pretty much any
         | important data to me is painlessly synced and it takes some
         | amount stress out of my life knowing that I have basically no
         | chance of losing data.
        
         | mbesto wrote:
         | > solved a few problems for a few people
         | 
         | Absolute rubbish. The proliferation of SaaS has been absolutely
         | huge for business productivity, in fact, I would argue that my
         | professional services business doesn't exist at anywhere near
         | its profitability without it.
         | 
         | > I don't want my application to require an active Internet
         | connection. I don't want it sending data to someone else's
         | computer. Probably most importantly, I don't want the software
         | that I pay for to change on me without my direct opt-in.
         | 
         | What software specifically? How to collaborate on literally
         | anything business wise without a internet connection?! Now, is
         | there a case for offline software? ABSOLUTELY. But to call this
         | whole thing a fad and a trend is absurdly disingenuous.
         | 
         | EDIT:
         | 
         | Just saw your reply below:
         | 
         |  _I have multiple devices, laptops etc. in my house. Setting up
         | a new Linux install takes me about 20 minutes. Wouldn 't know
         | about Windows. Then again, I probably use way fewer "services"
         | / "apps" than most people. It's funny, I've always been a very
         | tech savvy computer nerd. I've developed software for a living
         | for 25 years. But the older I get and the more the industry
         | changes the less I find I use "modern tech" as a consumer._
         | 
         | Ahhh makes more sense, you're a developer. I get that YOU might
         | not need SaaS tools, but this is a very myopic take.
        
           | gspencley wrote:
           | You realize I was speaking for myself, right? I never once
           | said that SaaS doesn't provide any value to anyone.
           | 
           | But you need to understand that even as a self-employed
           | business owner (product company, not contractor btw) for 15
           | years, I didn't take advantage of many SaaS tools at all.
           | 
           | Collaboration is niche. B2B productivity tools are a big
           | industry (ironically I actually work for a company that makes
           | a popular B2B collaborative SaaS product) but in the global
           | scheme of things it's still a narrow niche when you consider
           | the broad field of computing and software in general. Not
           | everyone needs to be mobile, not everyone needs to
           | collaborate. There are loads of software applications that
           | can be local only, but there are few options because of the
           | way our industry works.
           | 
           | And your post is timely because I was just thinking to myself
           | this morning about how the biases that are introduced by
           | Product Owners who come up with these ideas in work-related
           | contexts, even if they are not the POs of B2B or
           | "collaborative" software, still permeate non-B2B,
           | non-"collaborative" software. They are in "work mode" and so
           | they tend to think in terms of "How do _I_ interact with this
           | software. What do _I_ need? " rather than actually
           | considering the use cases for their every day users.
           | 
           | Take gaming, for example. Multi-player gaming is quite
           | popular and those who seek it out ought to have options
           | there. BUT ... I stopped gaming in large part because the
           | industry went all in on online multiplayer and single player
           | gaming options became more difficult to find. It's not that
           | they don't exist anymore, it's just that I don't want a
           | console that requires an Internet connection to play a story-
           | based game like The Last of Us.
           | 
           | It's the following that pisses me off:
           | 
           | - The "all or nothing" mentality of our industry
           | 
           | - The ability for companies to change software that I use and
           | pay for without me being able to decide if it's worth
           | "upgrading" or not
           | 
           | - The lack of choices
           | 
           | I think it's pretty rich that we're both accusing each other
           | of the same thing. You made the argument that because
           | collaborative B2B tools are useful in a business context that
           | it is "myopic" of me to want something that doesn't cater to
           | that niche. I can make the exact same argument right back at
           | you.
        
             | mbesto wrote:
             | > You realize I was speaking for myself, right? I never
             | once said that SaaS doesn't provide any value to anyone.
             | 
             | > solved a few problems for a few people
             | 
             | Are you trolling?
        
             | Ensorceled wrote:
             | >>> but we went all in as if there were no alternatives and
             | those of us who don't require mobility and would prefer
             | that we can choose when to "upgrade" and what data to
             | "share" were left behind
             | 
             | > You realize I was speaking for myself, right?
             | 
             | So "us" is just you? Your "us" is a very small minority,
             | which is the point of the people who are responding to you.
        
         | d--b wrote:
         | Well try and start an offline only software business right now,
         | and you'll see the request pouring in.
         | 
         | "How do I share this with other people (who don't pay for the
         | software)?"
         | 
         | "Can we work collaboratively on this?"
         | 
         | Etc etc.
         | 
         | People are used to things being in the cloud already. And I am
         | not talking about tech people.
         | 
         | Once you've experienced live collab, there is just no turning
         | back...
        
           | wintogreen74 wrote:
           | You hit the crux though: collaboration. If your product's
           | essence is collaboration you'll need to support this, but if
           | it's an enhancement the local experience is often so much
           | better, and we can solve the connectivity part on the side.
           | 
           | >> People are used to things being in the cloud already. And
           | I am not talking about tech people.
           | 
           | Most people use their phones for almost everything, and this
           | is almost all local execution, local persistence and huge
           | amounts of cloud-based collaboration. I wish desktops were on
           | this trajectory.
        
         | nonethewiser wrote:
         | I will almost always choose to use the web app over downloading
         | a client onto my system. Keeps things clean. The exception is
         | when the web app quality sucks.
         | 
         | I'm sympathetic to your point but most apps I regularly use
         | require internet anyways.
        
         | dabluecaboose wrote:
         | Hear hear. I often dream of having a home setup with everything
         | but my web browser blocked from accessing the internet, and
         | exception granted as they are necessary.
         | 
         | Alas, that's a pipe dream because of the way things work now,
         | and I don't necessarily want to inflict a luddite lifestyle on
         | my wife and children. But the allure is still there to setup
         | some crackpot scheme that will keep me from idly pulling out my
         | phone to check whatever just because my brain is idle for 5
         | seconds.
        
         | mathgladiator wrote:
         | I agree with this in spirit, but there are many advantages to a
         | services model. However, building services is exceptionally
         | complicated. I'm building a simple platform which people can
         | run at home or in cloud. I have an unlisted tech talk dry run
         | https://www.youtube.com/watch?v=bWYgChA_aYA
        
         | fwip wrote:
         | We have articles about offline-first, cloud-optional software
         | because those articles are primarily discussing tools written
         | using web technology (HTML and Javascript) and often running in
         | your web browser.
        
         | scarface74 wrote:
         | Alternate take:
         | 
         | I work on my documents on my computer, my phone and my iPad.
         | 
         | My IDE is hosted in AWS Cloud 9 most of the time because I
         | travel a lot and while my internet may be spotty, it's good
         | enough to connect to the hosted environment and I get full
         | speed internet between my IDE and the Internet when I need to
         | download something to it (packages, Docker containers, etc)
         | 
         | My photos and videos automatically get backed up to iCloud,
         | Google Drive, Amazon Drive and OneDrive.
         | 
         | If I dropped my phone into the ocean, I can go to the Apple
         | Store, buy a new phone and it's just like having my old one.
        
       | hamsterbase wrote:
       | Couldn't agree more.
       | 
       | I just developed a local-first read later software using CRDT
       | technology. aka
       | 
       | https://hamsterbase.com/
       | 
       | 1. all data is stored locally, one page corresponds to one CRDT
       | file. CRDT file is a single source of information
       | 
       | 2. use sqlite as cache for query and full text search.
       | 
       | 3. use the version of CRDT as the file name. It is guaranteed
       | that there will be no duplicate file names and never file content
       | changes. Only files are deleted and added.
       | 
       | In this architecture
       | 
       | Users could synchronize their data with any intermediate media.
       | Such as hard disk, iCloud, http interface, webdav. It is
       | guaranteed that there will always be no conflicts.
        
         | wg0 wrote:
         | These ideas seem pretty doable for a single user note taking
         | app but as soon as you include another collaborator, you've a
         | whole another problem of different levels of conflicts, CRDTs
         | and what not.
         | 
         | Becomes lot more harder when you have some 100 agents in the
         | field, taking orders on their mobile devices and you have to do
         | full double entry book keeping even when offline.
        
           | mgkimsal wrote:
           | And... you've got a large list of customer, contact and
           | historical info to allow access to. Sending that down to
           | people so they have it locally becomes at least a bit of a
           | privacy/security concern.
        
           | hamsterbase wrote:
           | This solution is suitable for processing documents. For
           | example, figma uses a technique similar to CRDT.
           | 
           | It is not suitable for processing orders.
        
             | preseinger wrote:
             | if two different users modify the same version of the same
             | document in different ways, how do you resolve that
             | conflict without losing information?
        
               | hamsterbase wrote:
               | I have recorded all the operations of a document. Each
               | operation has an id .
               | 
               | When the document is loaded into memory, it has a unique
               | uuid as the agent id.
               | 
               | If the current version is
               | 
               | hash(a1 b2 c3)
               | 
               | If two people edit the document at the same time the name
               | will become
               | 
               | hash(a1 b2 c3 e4)
               | 
               | hash(a1 b2 c3 d4 d5)
               | 
               | After merging, the document name will become
               | 
               | hash(a1 b2 c3 d4 e4 d5)
               | 
               | a1, b2 is "Lamport timestamp"
               | https://en.wikipedia.org/wiki/Lamport_timestamp
               | 
               | the full version (a1 b2 c3 e4) is "vector clock"
               | https://en.wikipedia.org/wiki/Vector_clock
        
               | preseinger wrote:
               | if d4 and e4 are conflicting edits, then how do you
               | resolve them?
               | 
               | say (a1 b2 c3) is "abc" -- (a1 b2 c3 d4 d5) is "abxx" and
               | (a1 b2 c3 e4) is "aby"
               | 
               | what is (a1 b2 c3 d4 e4)? it isn't "abxxy" or "abxy" or
               | "abxxy" or anything else, because d4 and e4 are
               | concurrent/conflicting updates, which have no single
               | well-defined resolution (without additional information)
               | 
               | meaning, this is a conflict
               | 
               | if you just say that this resolves to (a1 b2 c3 e4) then
               | this is LWW but you've lost the information in d4 and d5,
               | so whoever was agent d has written information that was
               | good for a little while, but then ultimately lost after
               | merge, right? so this isn't consistent in any useful way?
        
       | jongjong wrote:
       | Except for all the people who died before the internet was
       | invented. They were completely offline.
        
       | adql wrote:
       | Yeah and riding 1000cc bike is just like driving the bicycle with
       | Extreme Speed /s
       | 
       | > In the case of webRTC, I've seen so many projects do this where
       | they're like, "It's peer-to-peer! You just connect to the
       | signaling server and then the things talks!" That's not really
       | peer-to-peer cause you've got a server. If you've already got a
       | server...my advice is: don't mess around with peer-to-peer stuff,
       | just use that server.
       | 
       | The prevalence of NAT really did a number on ability to have
       | properly p2p communication. And, well, rampant insecurity of
       | default user setups making most internet connection be at the
       | very least behind "only allow outgoing traffic or traffic
       | initiated by user" type of firewall.
       | 
       | Even if you make all that nice code with each user having it nice
       | and secure private key and having to accept someone's public key
       | to start communicating there is still problem with distribution
       | and ascertaining that user is really who they are.
       | 
       | And even if they are, well, they can be compromised, so your
       | local app also have to be very secure or else the potential
       | malware can just go between your contacts and compromise everyone
       | using the app.
       | 
       | Or, you can just use SaaS and don't worry about it, or at the
       | very least not worry about more than one app having ability to
       | compromise your system
        
         | klabb3 wrote:
         | NAT is definitely the villain but their are other things as
         | well. You still need a discovery system to find who you want to
         | connect with. An ip isn't very good because it moves around,
         | and DNS is too slow to be operationally viable.
         | 
         | And even if you solve those you have an N^2 problem in the
         | naive solution, and to reduce that you need mesh networks which
         | just don't have the QoS we've come to expect (to my meager
         | knowledge).
         | 
         | Imo we should be able to find a better middle ground, because
         | full decentralization is insanely hard. If we had federated
         | standards and tooling like web and email, but for modern use
         | cases, I'd be a happy man.
         | 
         | Despite (or perhaps because) the tech craze over the last
         | decade, the developments of such open and useful standards
         | leaves a lot to be desired. Almost everything cool these days
         | is some app with perhaps an api that is branded as a
         | "platform". We're basically treading water.
        
       | dariosalvi78 wrote:
       | an email client is a good example: you can read and send emails
       | also offline (at least with most clients that keep a decent
       | cache) and only synchronise when connected. But that works for
       | some services, not all.
        
       | [deleted]
        
       | shadowgovt wrote:
       | Similarly, files are just a one-way pipe to an unknown process to
       | be executed at some indeterminate future time (ranging from "now"
       | to "never").
        
       | zaporozhets wrote:
       | This sounds like something one might say during an LSD trip
        
       | coldtea wrote:
       | Online is just offline with
       | 
       | extreme latency for any new data fetch/processing (an http
       | roundtrip or more for each interaction with your data)
       | 
       | someone else being in control of the programs you use, forcing
       | changes and updates whenever they like, renting them as a
       | service,
       | 
       | your data hostage, snooped at, sold to advertisers
       | 
       | a limited UI experience based on the DOM and browser APIs
       | 
       | crappy OS integration
       | 
       | (often) ads
        
         | jrm4 wrote:
         | Right.
         | 
         | There's a great deal of _technically_ unnecessary complexity
         | that many people here handwave away because  "that's just how
         | it is."
         | 
         | It's kind of funny how, e.g. above, the emphasis is on "UI,"
         | when that's not it at all. It's the underlying infrastructure
         | that's often encrusted layers of unnecessary (but profitable)
         | stupid.
        
         | titzer wrote:
         | > (often) ads
         | 
         | This is a much bigger problem than people realize. Instead of
         | working on _improving user experience_ , we've got people
         | explicitly working _against_ user experience by injecting ads
         | into it, for the simple reason that they have your attention
         | and can then _sell it_. It 's the attention economy, and it
         | sucks. Fuck ads.
        
           | charcircuit wrote:
           | There would be no user experience if there were no ads.
           | Working on ads can improve the user experience by making them
           | more relevant.
        
             | alasarmas wrote:
             | I think people are really only interested in commercial
             | messages when they come at a much lower frequency than they
             | do these days. Other than that, it's just noise that we
             | suffer through in order to get the information or content
             | that we want.
        
               | kapp_in_life wrote:
               | >Other than that, it's just noise that we suffer through
               | in order to get the information or content that we want.
               | 
               | The trailing part that's left off is "for free". If you
               | want all the content we receive for free today, someone
               | has to pay for it. So either people pay with their
               | attention or their wallet, and consumers have by and
               | large made their choice of ad supported services over
               | paid alternatives.
        
               | mehlmao wrote:
               | I pay for software and the developers force in ads later.
               | It's not either or, it's just racing to the bottom,
               | forever.
        
             | yamazakiwi wrote:
             | User Experience exists in many spaces that lack ads. Ads
             | don't inherently improve UX, nor are they required for a
             | good experience.
        
         | govolckurself wrote:
         | Whoa now. Don't go after the cash cow! It's so much harder to
         | rent-seek when people just run regular programs that don't
         | require 10 gigs of RAM and internet access. But where's the
         | career promotion in that?
        
         | JadeNB wrote:
         | > (often) ads
         | 
         | This one doesn't have much to do with online vs. offline except
         | that you have to be online to see the "latest and greatest"
         | ads. Stale ads can perfectly well be shown offline.
        
           | alpaca128 wrote:
           | > Stale ads can perfectly well be shown offline.
           | 
           | They can, but an Android app I use regularly simply won't
           | show any ads if it cannot access the internet - I get its
           | premium version for free just by pressing a button. Meanwhile
           | I've seen the user-hostile version of that on an iPad years
           | ago, where an app simply locked itself until it was able to
           | download ads.
        
           | coldtea wrote:
           | Traditionally they weren't on offline software though. It's
           | an online-era thing, and it thrives on online-ness, both for
           | getting the "new" ads and for sending impressions and
           | telemetry back. Even on modern offline-software-with-ads it's
           | usually a glorified web view.
        
             | hgsgm wrote:
             | Most of my _paid_ online software from non-monopolist
             | providers doesn 't have ads.
        
               | coldtea wrote:
               | Most of it still sells your data to advertisers... even
               | when they promise they don't.
        
         | goodpoint wrote:
         | ...and more surveillance.
        
       | quartz wrote:
       | I'd frankly be happy with more apps just being offline tolerant.
       | 
       | Surely google maps knows I live in NYC by now but if I'm between
       | stations on the subway the odds of me being able to pan around at
       | various zoom levels is surprisingly low. Surely basic semi-static
       | highway and geographic information could be locally stored (this
       | basic information used to fit in a spiral bound book we'd keep in
       | the back seats of our cars).
       | 
       | iMessage just gives up if a message can't go out rather than
       | queuing it.
       | 
       | Heck most weather apps won't even show me the previously
       | downloaded forecast if there's no network, they just show "-" or
       | a sad cloud image.
        
         | moritzwarhier wrote:
         | Re: Google
         | 
         | I assume they still have the "offline maps" feature, but you
         | set it up and select regions by yourself. I have no idea why
         | they haven't automated that using their location tracking and
         | AI features.
         | 
         | Re: iMessage Yes that's a shame. Only excuse I can imagine is
         | there should be some timeout by how much a message is allowed
         | to be delayed. And because of SMS delivery etc this would
         | probably cause a lot of complexity (cellular has its own
         | queueing system, at least here, and it's unreliable)
        
           | hgsgm wrote:
           | Android GMaps has done this for years already.
        
       | jancizmar wrote:
       | Well, nice, but who is going to make the money?
        
       | dcow wrote:
       | We are beyond fucked in terms of any effort to build local-first
       | software.
       | 
       | Notably:
       | 
       | 1. product people and interaction designers don't understand or
       | care about the difference, which isn't strictly their fault,
       | because
       | 
       | 2. users don't understand (heck some even want a team of
       | engineers making sure the DB doesn't drop their writes all day
       | every day) and only care when the software can reasonably be used
       | offline anyway, which means
       | 
       | 3. standards, protocols, and platforms have baked in dependence
       | on servers (oauth, tls, ip, mobile device native apis, the
       | goddamned entire browser, etc.) for example, you can't do
       | anything on iOS in the background unless you have a server
       | sending the devices silent push notifications every 5 seconds ...
       | also
       | 
       | 4. true offline with anything more than 1 client is a distributed
       | system and instantly _hard_ , so
       | 
       | 5. the entire tech community is not trained to build offline
       | applications, we're trained to glue react UIs onto CRUD backends
       | because thats how you 10x your SAAS revenue in valuation over 3
       | years.
       | 
       | I am _lucky_ enough to have worked on a few products where we did
       | have to care about offline and it _still_ ended up being
       | relegated to the realm of  "obscure edge case", for all intents
       | and purposes. So you end up continually justifying why you're
       | spending resources on supporting these weirdos who don't have
       | reliable internet connections.
       | 
       | Sigh.
       | 
       | /rant
       | 
       | These days, I do honestly think that some things just need to be
       | online. The internet is meant to be a globally addressable
       | network. You're not supposed to have these little islands of
       | accidentally private because-we-ran-out-of-addresses-and-hacked-
       | the-shit-out-of-the-protocol-(NAT) networks. You're not supposed
       | to be afraid of someone sending port 22 on your laptop an ssh
       | handshake because the crypto is good. The whole _IP_ world is
       | supposed to be zero trust. We dropped IPv6 scopes because they
       | were a crazy idea for a different world where we all ran
       | federated networks and whatever.
       | 
       | The real point of "local first" in our modern world is about
       | _data ownership_. If we can do anything as a community to help
       | move the needle and get to a better place, it 's building
       | applications where clients truly own the data and the server just
       | provides convenience and redundancy. Give clients
       | cryptographically strong identities. Use webauthn. Sign requests.
       | _Trust_ users with their own data. Help users be sovereign and we
       | solve lots of privacy and centralization issues all at once.
       | 
       | /soapbox
        
       | muhaaa wrote:
       | IF you can solve data sync for your application, local first is
       | simple & easy to develop and feels very responsive for users.
       | Lots of business applications are now in that range. 10MB of ERP
       | data is like 1 year of operating a medium sized company is the
       | equivalent of a picture of my cat.
        
       | mensetmanusman wrote:
       | Latency, bandwidth, signal to noise, etc. are all different by
       | orders of magnitude
        
       | budoso wrote:
       | Sounds like an opportunity for a new JS framework, because nobody
       | wants to write this stuff themselves
        
       | samwillis wrote:
       | It's a bit like when smart phones happed we started doing ui
       | "mobile first" as it easer to scale up a mobile UI to desktop,
       | it's easier to start "offline first" and move to constantly
       | online (even collaborative) than to start online first and add
       | "offline" eventual consistency later.
       | 
       | There is much chat about real-time collaborative apps, but the
       | reality is that most people are working async most of the time.
       | If you start with the concept of offline first, with eventual
       | consistency for collaborative work, you implement all of the same
       | conflict resolution as if you are implementing a real-time app
       | with conflict resolution. Then adding real-time collaboration
       | later is easy.
       | 
       | This is where CRDTs (conflict free replicated datatypes) work
       | better than OT (operational transforms). OT need more supervision
       | from the server, the further you diverge from the servers state
       | the more likely there will be a corruption. CRDTs are inherently
       | designed to work with massive diversion and no central authority,
       | really they are offline first.
        
       | vrglvrglvrgl wrote:
       | [dead]
        
       | phendrenad2 wrote:
       | TL;DR: This is about offline _communications_ and not the world
       | in general. It also assumes that communication is achievable. In
       | the real world (offline and online), we have problems with that.
       | When you attempt to communicate online you are often redirected
       | "through the gift shop" so you can be shown the exact number of
       | ads such that you statistically won't give up and pick up the
       | phone (and I'm sure phonecalls will have pre-roll ads at some
       | point too).
       | 
       | In fact, ad-hoc random person-to-person communications online are
       | gatekept by "the algorithm" which would rather answer your
       | question directly to keep you from meeting another warm body
       | online.
        
       | davnicwil wrote:
       | > Why can't we do this easily yet?
       | 
       | Well, because it's distributed computing. Distributed computing
       | is hard... really hard! Especially for applications requiring any
       | level of real-time-ish interactivity between different users.
       | 
       | Two computers talking to each other in a room via a server in
       | Virginia is not absurd. The physical distance is abstracted over
       | completely, the application engineer needn't think about that at
       | all, that's the beauty and point of protocols like tcp/ip.
       | 
       | What cannot be abstracted over is the single source of truth in
       | the networked system (the server) that makes a whole class of
       | really hard problems go away. So as much as you can describe the
       | remote server as a problem, because of latency perhaps, it is a
       | vastly lesser problem than the distributed computing ones that'd
       | be introduced in the alternative!
       | 
       | That is the basic reason why things are the way they are, it's
       | really not absurd or surprising at all, in my opinion.
        
       | aequitas wrote:
       | I think that boils down to CAP theorem and whether or not you
       | want to shift the problems onto the user. With collaborative
       | tools like chat or shared document editing. It's far easier for
       | the system to deal with and for the user to conceptualise an
       | availability error like not being connected to the WiFi or the
       | cloud provider being down for a moment. Than it would be to deal
       | with consistency errors like conflict resolution and asynchronous
       | communication, eg: high volume chat channels/threads where
       | responses arrive out of order or too late to be relevant.
       | 
       | It's just easier to switch to a different tool like IM or phone
       | when one cloud tool is down so you can quickly discus the topic
       | there, that to postpone your mental train for when everything is
       | eventual consistent. Or to switch to the 'offline' tools we
       | already have, like e-mail, which require you to rethink your
       | train of though to the different medium.
       | 
       | Also central authorization and authentication are not to be
       | overlooked. Those problems also suffer heavily when partitioned.
        
       | ftxbro wrote:
       | > "A lot of the time we're using the techniques to build aircraft
       | carriers when what we really need is a bicycle: something simple,
       | something personal, something that can take you where you need to
       | go and that responds to you alone (and is a heck of a lot easier
       | to maintain and operate)."
       | 
       | sounds like
       | 
       | "Linux is a semi-truck with 20 gears to operate. Windows is more
       | like a car. TempleOS is a motorbike. If you lean over too far,
       | you'll fall off. Don't do that."
        
       | amelius wrote:
       | "Never underestimate the bandwidth of a station wagon full of
       | tapes hurtling down the highway."
       | 
       | https://en.wikiquote.org/wiki/Andrew_S._Tanenbaum
       | 
       | The latency, however ...
        
         | systemtest wrote:
         | LTO-9 tapes do 45TB compressed, 18TB uncompressed. And uses
         | around 0.23 cubic decimeter of storage.
         | 
         | A European station wagon with the rear seats folded takes 1555
         | liters, with 95% utility that is 6422 tapes. That wagon can
         | hold 289 Petabyte of compressed data
         | 
         | From Amsterdam to Rotterdam, it takes about an hour to get your
         | data to its destination. That is roughly 640 Terabits per
         | second. For comparison, AMS-IX peaked at 11 Terabits per second
         | last year.
        
           | seabass-labrax wrote:
           | A fair comparison with AMS-IX would perhaps need to factor in
           | the time spent reading/writing the tapes though. Compressed
           | LTO-9 tapes can be fully read in about 12.5 hours, so
           | assuming for sake of argument that your car contains 6422
           | compressed tapes with a total of 289PB of data on them
           | already, and that you have (a rather expensive) array of 26
           | LTO-9 drives at your disposal in Rotterdam, you'll need about
           | 130 days to fully read their data. The hour of driving across
           | Holland is rather insignificant compared to that. All in all,
           | you get 'only' 26 GB per second, limited to that only by
           | having 26 drives.
        
           | lozf wrote:
           | What happens when you add the time to restore that all that
           | data once you get to Rotterdam?
        
             | amelius wrote:
             | That depends on how many tape drives you have at the
             | destination.
        
       | CalChris wrote:
       | In related news ...                 Never underestimate the
       | bandwidth of a station wagon full of tapes hurtling down the
       | highway.
        
       | alberth wrote:
       | I've always thought of it as: _Offline is Persistent, Online is
       | Ephemeral_.
       | 
       | e.g. physical books can last centuries, an online blog - not so
       | much.
        
       | wheelerof4te wrote:
       | Someday, in the far, far 90s, we had LAN. And everything worked.
       | 
       | Now, you need 5Mbit speeds just to collaborate. Funny how the
       | tech "progressed".
        
         | 9dev wrote:
         | In other news, old man yells at cloud. You conveniently ignore
         | the changed reality: since the 90ies, the number of active
         | internet users, malware, services, goods sold, and customer
         | expectations have skyrocketed.
         | 
         | What you have in stock is nostalgia, my friend. Everything
         | worked? Like Windows 95 crashing if you looked at it sideways,
         | Linux requiring you to compile drivers for pretty much any
         | device yourself, like fifteen competing printer protocols all
         | incompatible with each other? You might want to get a reality
         | check :)
        
           | genewitch wrote:
           | in the 90s, there was microsoft messenger. real time, point
           | to point (and maybe ptmp) chat, audio, and video. What
           | replaced it? I have to run a coturn (STUN) server just to be
           | able to talk to my friend in a private way, which means now i
           | gotta deal with some provider for hosting both coturn and,
           | say, Matrix (Synapse).
           | 
           | I also run a PBX, just in case coturn decides to stop working
           | from lack of use. Now i gotta make sure i start the PBX app
           | (3cx) once a week otherwise android helpfully removes
           | notifications for me!
           | 
           | AIM, ICQ, etc were great - and i'm discounting "presence",
           | because that was a small part of it. realtime communication
           | for "free". I've been running chat servers for over a decade,
           | and right now, there's three people on my matrix server, me,
           | wife, and my best friend. there's five people on my PBX, same
           | three plus my youngest child without a SIM card, and grandma,
           | so grandma can call kid and vice versa. I've run ircd,
           | matrix, rocket.chat, mattermost, a couple of the jabber
           | systems, ventrilo, teamspeak, hand-rolled garbage.
           | 
           | we've had people sign up and chat once, but as soon as
           | notifications stop working we never see them again. Heck, i
           | have 3 PUSH accounts just to make sure that notifications go
           | through everywhere.
           | 
           | Meanwhile, 20-25 years ago, load up trillian or AIM/ICQ and
           | there was everyone, literally everyone. I know facebook ate
           | that lunch, but i refuse to have any facebook apps on my
           | phone, and most people i know refuse as well, so that's a
           | non-starter. Texting is _still_ spotty, because VoWiFi tends
           | to just magically stop working if you leave the wifi area a
           | couple times in a day, so texts will sit in limbo until you
           | realize. Phone calls are the same way (except via PBX, those
           | always seem to work for some reason...)
           | 
           | running out of IPv4 and the ubiquitousness of CGNAT have
           | killed what the internet was. And that's sad; "nostalgia"
           | isn't necessarily a negative thing. It used to be better, at
           | least in the West. Maybe wechat and signal and telegram and
           | whatever work better for the rest of the world now than any
           | of our stuff from 25 years ago, i wouldn't know, because i
           | know exactly _zero_ people on any of those services - i 've
           | checked, once every couple of years.
        
             | zamnos wrote:
             | But have you tried to move any users over to, "wechat and
             | signal and telegram and whatever"? Getting users onto your
             | own system wasn't trivial. If you want to move to a more
             | supported system like, say, Signal, then you have to pay
             | the platform switching costs, which includes moving your
             | group of people. Which involves having the social capital
             | to do so, which is unfortunate for the less social of us.
             | 
             | There are many things that killed what the Internet was in
             | the 20-30 years hence. IPv4 exhaustion is regrettable, but
             | entirely predicted, and for those in the west, not a huge
             | deal. I can pay any number of cloud providers a small fee
             | to host me a box with a publicly routable IPv4 address.
             | CGNAT is annoying, but the number of libraries which will
             | punch a hole in that NAT has also expanded by a huge margin
             | since the 90's. So those up things are unfortunate, but I
             | think there are many other things that changed the
             | Internet, some for the better, some for the worse.
        
               | genewitch wrote:
               | > But have you tried to move any users over to, "wechat
               | and signal and telegram and whatever"?
               | 
               | no, because everyone uses something different and there's
               | no "trillian" or meebo for all the shiny-tech. If we're
               | going to play "encrypted chat", that no one can agree
               | what that means, or what service to use, may as well use
               | my own. Hopefully matrix becomes more popular (it
               | probably won't, unfortunately*), but if not, i still
               | won't use the likes of telegram or FB messenger or tiktok
               | DMs or anything of that nature. there's not a good IRC
               | client for phones, last few times i checked over the past
               | 15 years.
               | 
               | * Matrix has the curse of being good enough on the client
               | side, but kind of a PITA on the server side. Synapse, the
               | reference implementation is in python, which is single
               | threaded, so joining a large room "as-is" out-of-the-box
               | is not feasible. You have to split each of the synapse
               | elements into a microservice that gets its own python
               | instance, but the documentation was (and probably still
               | is) quite sparse. I'm sure there's a _discord_ where i
               | can get help.
        
           | blowski wrote:
           | In the late 90s, I used to collaborate with about 10 people,
           | all in the same office on the same LAN, for production of a
           | magazine that sold IT stuff.
           | 
           | We used the "Excel Shared Spreadsheet" functionality. The
           | file was hosted on a network drive. It corrupted or crashed
           | so frequently - even when only one person had it open - that
           | we took to copying it to your local machine, making the
           | network copy read-only, editing the local copy, then copying
           | back onto the network drive. Even this was buggy, so
           | possession of a stuffed octopus represented a lock on the
           | file. Microsoft themselves got involved at one point, as we
           | were a reseller for their products. Their solution was no
           | better.
           | 
           | So if there was a halcyon period for collaboration at some
           | point in the past, I'd like to know when it was. When I see
           | 100 people live editing the same Google Sheet, I think
           | perhaps we are in the golden age.
        
             | birracerveza wrote:
             | Please tell me you called it locktopus
        
               | tonyarkles wrote:
               | Heh, we had a similar process for modifying the schema
               | for an Access database or... something adjacent to it.
               | There was a bunch of XML that needed to be versioned and
               | if two people modified it, committed to SVN, and merged,
               | there was almost certainly going to be huge breakage. I
               | went out for a cigarette after one of the moments of
               | frustration, saw a nice maybe 2kg rock, and the Lock Rock
               | was born :D
        
           | goodpoint wrote:
           | > You conveniently ignore the changed reality: since the
           | 90ies, the number of active internet users, malware,
           | services, goods sold, and customer expectations have
           | skyrocketed.
           | 
           | Now our printers, cars, and soon fridges are DRM-locked and
           | doing surveillance.
           | 
           | And they can stop working at any time if the manufacturer
           | goes bankrupt or simply stop supporting them.
        
           | JaimeThompson wrote:
           | >Linux requiring you to compile drivers for pretty much any
           | device yourself
           | 
           | It's not much better on modern Fedora. The drivers do come
           | precompiled but you have to reboot sometimes twice per week
           | to install updates.
        
             | phkahler wrote:
             | I rarely do updates and don't get notifications for them.
             | Windows OTOH will demand I update, or decide to when I
             | don't want it to.
        
             | prmoustache wrote:
             | Nothing forces you to reboot it twice per week.
        
               | worthless-trash wrote:
               | Agree, they deliver updates and fixes, its good to have
               | the option.
        
           | radiospiel wrote:
           | so young man yells at old man yelling at cloud? TBF, software
           | in the past handled fluctuating connectivity much much better
           | than todays, probably because back then this was normal. Once
           | you got a thing working (a printer driver, say) it typically
           | worked.
           | 
           | Today, with spotty internet, software you have or could have
           | on your device might or might not work. Just recently I have
           | seen a website which loaded, but was non-functional until 2
           | mins later a cookie warning was also loaded.
           | 
           | Nothing in there is about
           | 
           | > the number of active internet users, malware, services,
           | goods sold
           | 
           | but about not building for applications only loading half
           | (because we are still waiting for some obscure JS or CSS from
           | not the original domain that noone really never needs.)
        
           | govolckurself wrote:
           | [dead]
        
           | usrusr wrote:
           | At least the printer protocols have stayed true to
           | themselves, the more the merrier.
           | 
           | Picking a random example: "AirPrint(r), Brother iPrint&Scan,
           | Mopria(tm) , Cortado Workplace, Wi-Fi Direct(r)".
           | 
           | Will a lists like that be enough to overcome your fear and
           | skip the costly upsell to exactly the same printer, but it
           | also understands PCL6? (likely a bit flipped in the
           | firmware...) You decide. It's like a reverse confidence
           | trick: "look, it's 2023 already and it's awesome, you really
           | don't need PCL6 anymore. Trust me."
        
             | phkahler wrote:
             | Haha I got a WiFi direct printer. It made no indication of
             | working with Linux but it just worked out of the box. It
             | came with a driver disk, and it's needed to get it working
             | with windows ..
        
               | usrusr wrote:
               | Nice to hear! I'm not really doing Linux on the desktop,
               | but in this age of almost-but-not-quite paper free, I
               | like to think of printers in decades. And on that time
               | scale, "no special fiery hoops to jump through on Linux"
               | is really the only thing that has any value as a
               | predictor of future usefulness. After some googling my
               | vague conclusion was that a full complement of wireless
               | protocols would indeed be a tolerable substitute of PCL6,
               | but I'm glad for the confirmation. (even if I recently
               | dropped out of the printer market again, turns out that
               | the day I gave up on my ca 2001 Samsung I just wasn't
               | sufficiently desperate to tease it into accepting an
               | empty page as something to print on)
        
               | genewitch wrote:
               | "paper free" sounds un-fun. I have a brother laser, that
               | replaced a 2 decade old HP laser that my youngest broke
               | when he was 2 or 3. We go through about 3 reams a year,
               | more when one of us is going for a degree. I print maybe
               | 5 things a month on average, usually recipes. I wouldn't
               | forego a printer for any reason.
               | 
               | you can use gimp to take images and make them into
               | coloring book pages, you can print instructions,
               | calendars, drawings, diagrams; prompts for writing, your
               | own writing to make sure that the "screen" isn't tricking
               | your brain making you miss editing/grammar errors.
               | Coloring pages, maps of countries, and other educational
               | things are more fun if you can hold them and put them on
               | your wall, if my kids are any indication. Having a
               | scanner and a copier and a networked printer in a single
               | box for what they cost - that makes it difficult to see
               | the aversion.
               | 
               | I have had fancy e-readers since the original kindle, and
               | before that a Clie and two palm pilots with acrobat and
               | an epub (or whatever) reader. and i still prefer dead
               | wood. I read more books on paper than e-ink. I read more
               | on a computer screen than books, though.
        
           | [deleted]
        
         | imadj wrote:
         | Too bad you can't use LAN to work from home
        
           | qtzfz wrote:
           | You use VPNs with more or less the same result.
        
           | bayindirh wrote:
           | Well, every WAN is a LAN when looked from a sufficient
           | distance.
           | 
           | DSL & Cable encapsulates Ethernet. City-wide networks are
           | again Ethernet. In fact, everything is Ethernet with some
           | routers between.
           | 
           | So, you're actually using a mixed-carrier Enthernet LAN with
           | a couple of NATs in the way. You can build another LAN on
           | your LAN with VPN, too.
        
             | imadj wrote:
             | I know you can use ethernet to build a network but if you
             | build a global network with 90s technology, you'll get
             | what?... the internet like we know today but worse. What
             | problem was solved?
             | 
             | That was my point responding to OP. We actually progressed
             | and we are facing new challenges.
        
               | bayindirh wrote:
               | We're still using 90s technology. We only have faster
               | switches, quicker routers, a couple of standards for
               | faster connections, and some tools which disguise or
               | repurpose deep packet inspection as "software defined
               | networking".
               | 
               | A country wide router still can stay in service for a
               | decade. Residential FTTx installations consist of a TelCo
               | class switch, maybe a router, compact DSLAMs if you have
               | DSL service and a couple of fibers in, tens of fibers out
               | for FTTH customers.
               | 
               | It's faster hardware on the same stack. Nothing more,
               | nothing less.
               | 
               | ...and, oh, link-speed (transparent) DPI equipment in key
               | places for lawful interception.
        
               | MichaelZuo wrote:
               | Theoretically, if an entire major city's connection with
               | the outside world was cut off, could all the
               | infrastructure within the city function as a really big
               | city-wide LAN?
        
               | bayindirh wrote:
               | Yes. You might need a dhcpd on a laptop though, if your
               | city's IP management is outside the said city (Cable/DSL
               | modems needs their own IPs, unless they are static).
               | 
               | ...and possibly a small DNS server (or a hosts file
               | somewhere easy to get).
               | 
               | That's all you need.
               | 
               | If you want to navigate via IPs only, you can do with a
               | DHCPd.
        
               | blowski wrote:
               | It's electrified rocks all the way down.
        
           | cesarb wrote:
           | > Too bad you can't use LAN to work from home
           | 
           | Depends on what you consider "work from home". You might not
           | be able to chat with your co-workers without a WAN connection
           | (unless you go really old-school and use a telephone), but
           | you can for instance develop software from home without any
           | working network connection (and git makes it easier by
           | allowing you to create commits while offline; see also the
           | "git bundle" subcommand). I've done so occasionally when the
           | Internet connection goes kaputt.
        
             | imadj wrote:
             | That's kinda my point replying to OP. We've indeed
             | progressed. I'm not sure if you are denying that?
        
         | nicce wrote:
         | Now you need 5Mbit speeds so that your Windows' boot time is
         | not slowed down.
        
       | excalibur wrote:
       | Relevant xkcd:
       | 
       | https://xkcd.com/2224/
        
       | toss1 wrote:
       | >>>It almost sounds like a form of resilient design (i.e.
       | progressive enhancement) if you think about it -- the cloud as an
       | optional, layered enhancement of your application. Now that's a
       | paradigm shift!
       | 
       | This is literally what was pioneered by Lotus Notes 32 years ago.
       | When everything was local, their rich-content databases could
       | work just fine locally and also replicate on any desired schedule
       | with other copies of the same databases/apps. The model was
       | explicitly Seldom-Connected, so you could run stand-alone in a
       | remote location for weeks and send/receive updates whenever you
       | got to a phone line, or could have it collecting/distributing
       | updates every N seconds on a persistent connection.
       | 
       | A vastly superior model to everything I've seen since, and it is
       | too bad that they, and especially IBM blew it with the weird
       | programmability models and corporate-extract-every-dollar
       | approach.
       | 
       | Acting as if this is a somehow new concept is just a display of
       | cluelessness, but it is good to see good concepts getting some
       | attention (again).
        
       | trevorg75 wrote:
       | SaaS has ruined the development landscape.
        
       | pyinstallwoes wrote:
       | Offline is just online with 0 degree lightcone.
        
       | samstave wrote:
       | One thing that seems to have gone out the window, to a _certain_
       | extenet, is the idea of DR, Business Continuity and resiliency
       | for a few key reasons:
       | 
       | 1. Cloud is not cheap, so doing a proper DR in a loud environment
       | is going to price out small/medium businesses.
       | 
       | 2. Most customers don't have staff skilled in the realms of "what
       | if" disasters, and have not tooled to spin up a copy quickly in a
       | new region/ _provider_ should their site get nuked.
       | 
       | 3. Most cloud customers have zero plan for what to do when cutoff
       | from their cloud providers, because of above.
       | 
       | -
       | 
       | It would be cool to pay for "ghost infrastructure" (I dont know
       | if this exists already)
       | 
       | But... the idea would be that as you build out your VPC/whatever
       | environment, the cloud provider creates a ghost version of that
       | infra in every other reegion (meaning all the configs and
       | everything are mirroed to a repo at the other locations and allow
       | one to spin up a complete copy of primary infa wherever one
       | likes, and youre basically paying a small amount for a clean, up-
       | todate DR copy of the environment as "a cost of doing business"
       | but in the event you needto, load a snapshot of everything (sans
       | actual data - thats extra) to just launch the environment...
       | 
       | We built this manually in the past (manually meaning the ability
       | to launch an instant VPC and migrate traffic to it... but this
       | was a few years back and I am sure that its far more mature in
       | the real world now...
       | 
       | So what options do people have today?
        
       | muyuu wrote:
       | The other way to see it is that offline is the outmost possible
       | edge computing.
       | 
       | Or that offline is zero network latency for the stuff you have on
       | your computer.
       | 
       | Or that offline is, when functional, like online but without
       | surrendering all control over your computing to someone else.
       | 
       | All these metaphors have their own limited scope where they are
       | true and most appropriate.
        
       | marginalia_nu wrote:
       | Alexa, write me a witty response mentioning IP over Avian
       | Carriers.
        
       ___________________________________________________________________
       (page generated 2023-04-19 23:00 UTC)