Sleep, diet, exercise, and meditation.
Sleep, diet, exercise, and meditation.
My coworkers simply refused to empathize with my frustration, but it's seriously like having a malfunctioning limb when a neurally deeply learned technology starts failing you.
Imagine a nightmare where when you try to open your hand and it closes, you try to move your arm outward and it smacks you in the face, you try to look down and your eyes instead flail randomly, and your legs are moving in slow motion while the monster is hunting you down.
I have no idea if it is possible, and maybe I should be the change I want to see in the world.
EDIT: I realize now this doesn't quite follow the conversation, but I wanted to get the thought out somewhere.
Can you expand some of these points? I fail to understand (I need an ELI5, first principles)
I think I get the premise, EMACs/Jupyter hybrid with ext. prog. lang. (+1 for typed).
> By keeping the specification of the components as abstract as possible, one could reinterpret the same code to give a completely different and customizable user experience.
Custom UX is my pet peeve, has been forever since the 1990s. I have intuitions but no clear understanding of what you mean here. Does that essentially mean decoupling model/view, a more modular or stateless metaphor?
> Probably with a lens based GUI toolkit for interactive widgets.
lens? (impossibly hard for me to Google what that generic word refers to, I just tried)
————
I'd like to 'get' to the essence of the paradigm you're suggesting. What the 'magic' is, its endgame, what it 'feels' or looks like.
As for the "abstract specification", I interpret it as decoupling the view from the model too, but maybe expressing how you can represent the model? Like "option" being representable by a dropdown or radius buttons. I don't know, I agree it's vague.
I said lenses, but the more general term is optics (still vague and unsearchable, I know). A certain representation of optics was popularized in Haskell by Edward Kmett partly as a way to solve the record access problem, but they are way more useful then that.
Lenses, in a context of programming, can sort of be seen as a vast purely functional generalization of l-values.
When you are manipulating affordances in a user interface, you can view it as manipulating part of larger state. That is something that fits very well into the framework of optics. A simple example would be a color picker using different color models. HSV and RGB are both views of the same object. A slider for each of hue, saturation, value, red, blue and green can be seen as a lens from color to a magnitude. By adjusting the slider, you change the state.
Some parts of a user interface are dynamical systems, i.e. evolve over time based on state and locally available actions. One can imagine a platformer game with changing player position, or a media player with a slider. FRP delves into this, but I'm not too familiar with the literature. I am vaguely aware that lenses can be connected to dynamical systems, but I don't understand it at all.
As far as reinterpreting code. In Haskell and typed functional programming in general, there is this tower of different abstractions you can use to describe different levels of reified computation (Functors, Applicatives, Arrows, Monads). You also get effects systems, which make it more tractable for the layman that doesn't want to read ω+1 monad tutorials.
In these abstractions, one can make "free" constructions, which sort of have the flavor of making the thing as syntactic as possible while still following the laws that must be upheld by the abstraction. This makes it possible to write code separately from the way it is interpreted.
I only have a vague feeling that these concepts will fit well together. Perhaps my head is too far in the clouds.
EDIT: As far as model view separation, that it is. But the idea is to stratify it even further. You have your larger state of the whole application in which you can increasingly select parts of the whole and manipulate them. The lens part not only captures the translation from the model to the view, but also from actions on the view to the model.
Extremely interesting, I must say at first glance. You're definitely technically stronger than me in most of these topics, I'll have to work on it a bit to clarify some of these concepts.
Thanks for an insightful and candid thinking out loud. Much appreciated. I wish other people would chime in as well to further the discussion, I'm afraid I won't be able to elaborate much technically but rather speak high-level UX concepts. What's interesting is that your general approach seems to answer an essential problem (and opportunity!) in systems whose complexity far exceeds human cognition (that's what I get from the 'lens', not what's on Google about it but the object in your head you call as such; it is sometimes hard to explain such things in a word, rather takes a book chapter).
Thanks again, I'll revisit this WE.
One of the benefits of the environment is I can change code very easily and see the changes quickly. But with types I'm not sure how you'd change the signature of a function and get it to recompile if it's already used elsewhere.
This has a very reactive flavor, so I think you could have a sort of functional reactive approach where your hot-swappable definitions are represented as behaviours over time.
How to make that get out of your way until you actually want to swap things out, I have no clue. I think it will involve some sort of effect system, but I'm not sure if that will solve the problem.
You can do virtually anything on Linux if you're willing to invest the time.
Regarding the line editing tools you mentioned that sounds to me like something built in to the native UI toolkit (I'm just guessing here though). Reconfiguring how physical keys are interpreted can obviously only do so much. I'd never heard of those shortcuts before and they sound like a really useful feature.
However, when I have a task that requires continually switching between Mac and Windows machines, it gets annoying. Double that frustration again when I'm using a Windows VM on a Mac.
I understand that not everyone has the luxury of space for a full WFH setup but I can't imagine doing 8-10 hours per day with only a 14" laptop at the kitchen table. This is why, for me, a Mac quality trackpad experience on Linux is closer than a nice-to-have than a necessity.
The combination of slouching your shoulders forward to keep your hands together and face-down for typing on a small keyboard, and looking down exacerbate such problems, faster for some than others—unless you happen have the build of a horse jockey.
I think some of us are lucky to have a flexibility gene activated. I have a 24" display I sometimes plug it into, but I've been working off this setup for a few months and it's fine.
:->
(mind you, for me second monitor is about sanity/efficiency, not ergonomics; but a well adjusted chair, keyboard and mouse make a stunning difference to my fingers & wrists these days)
Its trackpad is junk, phantom movements, zero palm rejection. I coded up some lock scripts so that it locks out the buttons if the cursor is moved. I fantasize about DeepTrack, the AGI that will finally give me trackpad bliss on a Linux desktop.