8 ms·
Any discussion about incremental UI should include Yaron Minsky's talk about Jane Street's OCaml framework, incr_dom from 2016: https://www.youtube.com/watch?v
by pgt 7y ago
Any discussion about incremental UI should include Yaron Minsky's talk about Jane Street's OCaml framework, incr_dom from 2016: https://www.youtube.com/watch?v=R3xX37RGJKE https://www.youtube.com/watch?v=R3xX37RGJKE
Incremental is essentially an implementation of Adapton from 2014: https://www.cs.umd.edu/~hammer/adapton/ https://www.cs.umd.edu/~hammer/adapton/
There is a big upset coming in the UX world as we converge toward a generalized implementation of the "diff & patch" pattern which underlies Git, React, compiler optimization, scene rendering, and query optimization.
Two sleeper startups in this space that are going to make a lot of money are Frank McSherry's Materialize Inc. and Nathan Marz's Red Planet Labs.
incr_dom source: https://github.com/janestreet/incr_dom https://github.com/janestreet/incr_dom
Differential Dataflow: https://github.com/TimelyDataflow/differential-dataflow https://github.com/TimelyDataflow/differential-dataflow
Declarative Dataflow Client: https://github.com/sixthnormal/clj-3df https://github.com/sixthnormal/clj-3df
Crux adapter for Declarative Dataflow: https://github.com/sixthnormal/clj-3df https://github.com/sixthnormal/clj-3df
- anp 7y agoHeartily agreed re: Materialize, and I've also been nerd-sniped by Adapton, although less literally than incr_dom.
- pgt 7y agoWhatever you do, do not read the META II paper, especially not Figure 5, which is the META II compiler written in itself. You may lose two months of your life: http://www.ibm-1401.info/Meta-II-schorre.pdf http://www.ibm-1401.info/Meta-II-schorre.pdf :)
- amelius 7y ago> Two sleeper startups in this space that are going to make a lot of money ... How are they going to make money if open source enthusiasts copy the ideas and spread them for free? See e.g. React -> Vue. Selling developer tools these days is just a losing game.
- pgt 7y agoYou are right about developer tools, but these companies are not selling developer tools. Plus, the technical implementations are non-trivial.
- anp 7y agoIt seems like Materialize has some interesting approaches in mind: https://www.youtube.com/watch?v=zWSdkGq1XWk https://www.youtube.com/watch?v=zWSdkGq1XWk
- amelius 7y ago> but these companies are not selling developer tools Welll ... from their website: > Red Planet Labs is pioneering a radically new kind of software tool. Also, the Materialize "reactive SQL" solution sounds a lot like Firebase.
- pgt 7y agoFirebase is a hosted database. Where does a dev tool begin and end? Is Slack a dev tool? Is HN? Where do you draw the line?
- pjmlp 7y agoTo developers on the street, kind of. Hence why everyone that want to make a living selling developer tools, turns to enterprise customers, B2B, or finds a way to package them as SaaS.
- Touche 7y agoI've thought this since Borland fell apart. The ship sailed a long time ago. Unless you're a unicorn like Slack with cross organization appeal you have no chance!
- pjmlp 7y agoJetBrains, OutSystems, Embarcadero (nee Borland),.... It is a matter of getting a target audience willing to pay for their tools.
- Nelkins 7y agoThere's also Aardworx[0], who are doing something similar with F#. Their extracted incremental computation library is here[1], and the platform overall is here[2]. There's also a bunch of cool talks on YouTube[3]. [0] https://aardworx.com/index.en.html https://aardworx.com/index.en.html [1] https://github.com/fsprojects/FSharp.Data.Adaptive/ https://github.com/fsprojects/FSharp.Data.Adaptive/ [2] https://github.com/aardvark-platform/aardvark.base https://github.com/aardvark-platform/aardvark.base [3] https://www.youtube.com/watch?v=mZ3o6TqNR6U https://www.youtube.com/watch?v=mZ3o6TqNR6U
- Nelkins 7y agoAnd here's some other interesting related content: 1. Deriving a Domain Specific Language for purely functional 3D Graphics - https://rawgit.com/wiki/aardvark-platform/aardvark.docs/docs/media/Elmish.html https://rawgit.com/wiki/aardvark-platform/aardvark.docs/docs... 2. Fable.Elmish.Adaptive (another instance of applying incremental computation to the Elm model) - https://github.com/krauthaufen/Fable.Elmish.Adaptive https://github.com/krauthaufen/Fable.Elmish.Adaptive
- kirse 7y agoThere is a big upset coming in the UX world as we converge toward a generalized implementation of the "diff & patch" pattern which underlies Git, React, compiler optimization, scene rendering, and query optimization. Don't forget Windows 1.0 in that list: https://www.bitquabit.com/post/the-more-things-change/ https://www.bitquabit.com/post/the-more-things-change/
- vsskanth 7y agointeresting insight! Do you by chance know what's the current model used by windows right now with WPF or UWP or whatever they call it today ?
- chme 7y agoModern UI frameworks mostly try to offload the rendering to the gpu where just every pixel is rendered for every frame into texture buffers. But of course that can be combined with diff&patch as well...
- vsskanth 7y agoYes I am especially curious to know how they manage state in desktop GUIs - if it's events and callback based or some other kind of functional architecture
- pjmlp 7y agoIn what concerns WPF, UWP (you can do this with forms as well although support is more primitive), via data bindings. The concept is somehow complex to master, I compare it to getting monads to click, but when you understand it, you are able to envision how to build the full UI architecture as having a Lego box at your disposal. For everything, views, stylesheets, event handlers, data models.
- int_19h 7y agoIt's usually event callbacks for actions, although these are often wrapped in a first-class "action" or "command" abstractions, to allow routing different events to the same handler - e.g. both the menu item and the toolbar button. For views, you either get some form of MVP, with explicitly implemented model interfaces that provide the glue between the views and the object tree they are representing, or data binding that effectively creates that same glue for you. Here's an example from UWP: https://docs.microsoft.com/en-us/windows/uwp/data-binding/data-binding-quickstart https://docs.microsoft.com/en-us/windows/uwp/data-binding/da... So no, it's not really functional. Quite the opposite - the state is global and mutable, and UX actions that purport change things really change them. That also makes it all very intuitive, though.
- mook 7y ago> There is a big upset coming in the UX world as we converge toward a generalized implementation of the "diff & patch" pattern which underlies Git, React, compiler optimization, scene rendering, and query optimization. I thought git (as opposed to, say, RCS) did _not_ do the diff thing, and each object is just the full thing, relying on gzip to do the compression?
- gmueckl 7y agoNo, git actually stores diffs when its reasonable to do so. You can check the files for the objects in the repository yourself. Git can compress these files into packs, but that's a separate step on top.
- outworlder 7y ago> No, git actually stores diffs when its reasonable to do so. No it doesn't. It does delta compression – which ultimately accomplishes the same goal – but this is not what people mean when they say that a version control system stores diffs (like SVN does). https://gist.github.com/matthewmccullough/2695758 https://gist.github.com/matthewmccullough/2695758 https://git-scm.com/book/en/v2/Git-Internals-Packfiles https://git-scm.com/book/en/v2/Git-Internals-Packfiles
- pgt 7y agoMerging requires diffing, and hashing enables efficient diffing. It's a reconciliation process just like checking balances in accounting, and you could think of version control as accounting for code.
- HeyImAlex 7y agoI might be remembering wrong, but I think Jane Street's incremental is based on self adjusting computation by acar vs adapton by hammer?
- todd8 7y agoThe predecessor of all these diff and patch systems/UIs is the ancient character terminal based curses library. [1] [1] https://en.m.wikipedia.org/wiki/Curses_(programming_library) https://en.m.wikipedia.org/wiki/Curses_(programming_library)
- stefan_ 7y agoThose are some big words when it's literally a more obtuse, less production ready variant of what WPF has been doing forever (and WPF wasn't the first on desktop UX to do it!). I mean, here is Qt shipping Qml interfaces in a ton of cars, and you're talking up rust2html.
- dakom 7y agoAlso maybe the Purescript experiments in incremental updates? Original idea: https://github.com/paf31/purescript-incremental-functions https://github.com/paf31/purescript-incremental-functions More recent Proof of Concept: https://github.com/jlavelle/purescript-snap https://github.com/jlavelle/purescript-snap (I just posted the latter to HN here: https://news.ycombinator.com/item?id=21690382 https://news.ycombinator.com/item?id=21690382)