Hiya, if you're interested in: - End-User Program...
# share-your-work
d
Hiya, if you're interested in: • End-User Programming, Declarative languages • Digital Gardens or Personal Knowledge Managers/Graphers • Decentralisation Then you clearly need to read my latest fine work: https://duncancragg.substack.com/p/from-app-trap-to-freedom-space TL;DR: we can break free of the "app trap" by simply building an OS without apps! (Don't forget to subscribe so you won't miss future updates, right into your mailbox...)
I'll kick off the conversation thread. Let me know what you think, either here or in the article comments.
It's aimed at non-techies, so don't pull me up on minor technical issues! One thing I should say: I've had to use the word "object", because it's what people will understand, and there's no other word in general use for what they are. But they're not OO objects.
@Leonard Pauli thanks for the ❤️! But did you subscribe? 🤗
l
Haha, done! Half-way through reading!
Yes! Smashing up apps and data-silos to concept based self-attaching nodes, is the way. I like the excel-like logic basis, allowing introspection and mouldability. I've been thinking up a similar track... could you make it even higher level? Where the data isn't just random binary/half-labeled spreadsheet cells, but actually modeled/given meaning through canonocalized constraints/relations? Possibly opening up for not just modular components, but fully dynamic interactions self-assembling from slices of information?
Also, seen urbit? The focus on local first sharable personal data-owning, in introspectable non-blob format, with separate logic/functionality layer, and yet separate render/ui layer...
Love the concept of semi-physical rooms! A place for chat, a place to hang, a place to research! All designable by you, the end-user, through components you've found on your travels through the lands! YES!
When you link the presence sensor to the lamp, how does it know? Sane defaults akin to node n noodles connections? What about wanting a dimmer? Delayed turn-off? You make those as connection boxes (node n noodles or sheets) in between? Fun indeed!
d
Wow, thanks, a torrent of points .. working backwards: Yes, a lamp knows that if it's linked ("wired") to a presence sensor it does one behaviour, if linked to a switch, another, if a dimmer, another. So probably hardcoded behaviours cos they're kinda obvious. Then user-written rules for the less obvious ones, or custom stuff like the delays. You could have nodes-and-wires style, or Unix-pipes style, if you like, but it's not essential. Whatever is most expressive. Yes, picking up stuff (by grabbing their links) as you travel, and then reusing them back home is certainly what I have in mind! I knew about Urbit a while back, but like many, I was put off by the politics! However, I've since become non-political, or maybe something more like an anarchist! So yes, I'll go back and see how far they've come over the last four years or so. Not sure what you mean in the first comment, which is why I'm replying in reverse order!
... modeled/given meaning through canonocalized constraints/relations? Possibly opening up for not just modular components, but fully dynamic interactions self-assembling from slices of information
example?
l
Nice! The concept example: A specific person might be a node in the infinite knowledge graph. Putting it in the context of a list, in the context of a 2d surface of certain size and viewing distance, may result in contact cards; put them in a 3d wallet may show as "physical" business cards, sending one to the full page printer may print a CV... Problem is... many permutations... hard-coding behaviors not scalable. Need way to dynamically adapt for each situation (combination of data slices and the context), with seamless ways of guiding it closer the the desired intention. For this, the computer needs to be included in the work, and given the relevant knowledge and agency to handle it.
Many AI solutions still suffer the "better horses" problem, the end-user needs to be empowered with a language to communicate their desires. Even reading the mind might not be enough, as the right language gives you the mental clarity in the first place. AI solutions could still guess well, and gather own experience... but if we want to include the human... Even without, the AIs themselves need inter-communication and clarity of thought. I'm proposing work towards a system facilitating such. A system where the current grunt-work of software development isn't applicable anymore, because of different abstraction levels and perspective. A system where the freedom and flow of creation and collaboration is found at yet a higher level.
d
Ooh, OK, that's a lot to process... let me think... 😃
So, firstly, yes, you'd have slightly different render of a given standard object type depending on context, whether in a list or embedded in another object, or pulled out on its own into the space. However, there's no need to do a different render for 2D and 3D: it'll be the same one. I'm thinking neuomorphic in both. (It's using Vulkan for both, underneath.) You wouldn't get a CV if you printed it, no, you'd have to jump the link from the contact card to the person's CV. If you were viewing the contact in 2D, then expanded the embedded link to the CV - seen as a smaller panel inside the contact, then hit "print", you'd get what you saw, with the CV. So yes, there's both some hard coding of behaviours of objects, and a default render of any standard recognised object type. But you can extend both. You suggest AI help for programming? And working at a higher conceptual level? I've probably over-summarised your point, so apologies there. So, I'm not working on AI or AI-to-human, etc., conceptual languages, except the programming language is declarative so intended to be humane, unlike imperative ones. It's what I call a "Domain and Target Independent Language" that is meant to be general purpose and conceptually intuitive without being Nat Lang.
l
Nice! Same, AI not in core, but, possibly similarly more power using the core/lang as the human is. Similarly, if core facilitates human-human collab, it may also similarly facilitate human-ai or ai-ai collab. Side note to show how it has fundamental long-term value in the post-gpt era.
Exactly! If the contact card needs a link to the CV, where is the data!? Eg. the name, and profile picture? Are they both linked in each, or duplicated? If linked to the person entity/node, RDF style or similar; then can the CV not be a virtual construct from available info in the graph, with possibility to override the heuristics on a case by case basis if needed, or even better, update the heuristics to facilitate improved CV's all over?
Eg. obsidian style, is the card and the cv separate but linked .md files, with info duplicated; or is each property atomic, and related rather than linked, such that a generic CV view could be shown?
Auto adjusting with time?
d
Nice! Same, AI not in core, but, possibly similarly more power using the core/lang as the human is. Similarly, if core facilitates human-human collab, it may also similarly facilitate human-ai or ai-ai collab. Side note to show how it has fundamental long-term value in the post-gpt era.
Yes, any human-cognition-aligned notation for data and rules will also be AI-aligned, one would hope!
Exactly! If the contact card needs a link to the CV, where is the data!? Eg. the name, and profile picture? Are they both linked in each, or duplicated? If linked to the person entity/node, RDF style or similar; then can the CV not be a virtual construct from available info in the graph, with possibility to override the heuristics on a case by case basis if needed, or even better, update the heuristics to facilitate improved CV's all over?
Duplication is frowned upon: it's all links. So yes, you'd build your CV from bits all over the place, a photo from here, a company logo and blurb from the company's collections, etc. Not sure what you mean by "heuristics", though?
Eg. obsidian style, is the card and the cv separate but linked .md files, with info duplicated; or is each property atomic, and related rather than linked, such that a generic CV view could be shown? Auto adjusting with time?
Card and CV separate and linked, yes, of course. No dupes. Not sure what you mean with the "atomic", "related", "generic", "auto adjusting" bits though!?!?
l
In essence, does those links bear explicit meaning, or is it tacit knowledge unavailable to the computer? Having done the CV once, is it generalized for all? Difference between compounding growth, or fostering an environment where monotonically rebuilding what's already done is kept the status quo.
d
Each link is a unique string that is essentially opaque or semantic-free from the HX (human experience!), but can still be used to tunnel location stuff by the P2P layer. The CV type would be an aggregate of smaller types - it's a history so that's a list of calendar event types, for example. So the OS front end could either rely on the render of those elemental lists and events, or it could recognise the super-type of "CV" to render something more CV-aware.
I had another look at Urbit, and it's interesting, but the "single function OS" over a persisted event log type of thing isn't really my kinda stuff. It could end up being similar to the Object Net and Onex from an end-user PoV, but I could find nothing on the site about why anyone would use it, what it would look like in the HX, etc. And, as soon as I see the "B" word (b..b...bb..blockchain!) I usually hit the quit.
l
"[...] over a persisted event log type [...] HX [...] B-word" yes, same! Reference from the aspect of user-owned data and that different "apps"/views can overlappingly utilize data. Projects get one or a few aspects right, but have yet to see someone put it all together! Enjoyed your writeup, checks many boxes! Would love to play around in that world 🙂 Just the customizable "chat-room" is gold.
g
This perspective on data and how to present and manipulate it should be foundational. WILL be foundational at some point. But: note the corpses behind you: OpenDoc, OLE, … I write about a suitable distributed data and security model for this sort of project at: frest.substack.com
l
@Guyren Howe "[...] WILL be foundational at some point [...]" ❤️ Let's bring it there! And yeah, oh yes. I've been cursed for the last 10yrs. Going full in once more. As long as you keep going you're not dead!
g
The way to build this now is with suitable services (local or remote) and an app to access them. The foundational data presentation should be values in namespaces and relations. APIs should be functional and relational.
The UI should be somewhat like Access or FileMaker, giving the user the direct ability to manipulate the relational data storage. Users can quickly become quite adept at manipulating relations. My FREST project is in part about making that distributed. I should be able to “join” multiple, distributed data sources and functions in an ad hoc manner.
k
TL;DR: we can break free of the "app trap" by simply building an OS without apps!
My main criticism of this claim is the word "simply". My second criticism is "simply building": that's only the first step, after that there is a long battle for adoption, trying to convince people to use an OS that won't let them access their photo collection stored at Google. But yes, I do want to see this happen!
d
@Mike Austin Hi I see you put a thumbs down on the post above where I said "But did you subscribe?" Wassup? 😧
@Konrad Hinsen Yes, it's conceptually "simple" to have an OS without apps, but "building" will indeed take from now until my last breath... All our data will be out there still, so as long as you have an API to those photos on Google, you'll be up and running! Things like email and the static web, and many chat applications, can be brought in to the Object Network. Anything that allows data to be grabbed (and shoved!) - via a protocol or a filesystem. I could even (reluctantly!) allow for old fashioned apps to be rendered in-world, starting with (and maybe ending with!) a browser. But I'm currently seeing the project as a "Lab" for Proof-of-Concept work, where I don't need to make any compromises such as that. I recently let go of any hope that anyone would be using it any time soon, to be honest! But things like blockchain stuff and Urbit, even though I'm not a big fan of either, do give me hope that completely new things can gain traction.
l
@Duncan Cragg Oh oh! You are actively full in building this now?! Outline of steps/areas of focus + some timeline available?!
I've been going back and forth between different entry points on the behemoth of foc... text language, logic engine, data engine, graphics engine, networking component... slowly realizing that working consistently productively alone is the first one to tackle, so going back to basics making quick playtoys to get the doing muscle warmed up again; ie. would love to get something like endless paper (infinite zoom/pan canvas) going (rust+wgpu) + published, then MMO functionality added, text rendering, dom-element attachments, obsidian integration, rust+gpu fn node n noodle graph playground (just take monaco editor as dom attachment) and we're of to the races.
d
I've been building "it" (for some always-changing value of "it") for decades! I'm able to work on it more these days, but timelines would be foolhardy given I've got random things coming up all the time! I'm currently busy on the 3D HX ("Human Experience", UI, UX), porting a 2D UI from a smartwatch version of the OS I made recently. This allows you to create, edit and link objects. That's fixing the "Balkanisation" "app trap" - so you can mash up lots of little objects of diverse types, any way you like. Then next I'll continue on the P2P protocol I started, focusing on cryptography stuff and proxy, cache and router functions. That's fixing the "Big Tech" "app trap", of course! Finally, I'll get back to porting my programming language from Java to C! So fixing the "Blob" "app trap" with EUP. So yeah, far too much for just me between now and my final gasp! I'll stay alive as long as I can.
"off to the races" sounds like it's as far away for you as me!
Got a link?
actually I think I've found you on GitHub, so I'll potter around in there for a bit...
l
nooo :P
d
Do you have a link to anything you were talking about above? The stuff on GitHub seems, quiet...
n
This reads quite similar to what Alex Obenauer is doing with WonderOS - https://alexanderobenauer.com/
To me both seem quite similar to the original Smalltalk approach - there is no data, just objects that represent computational processes
g
My work has aspects of Smalltalk about it. You could see it as a distributed Smalltalk, although there are some differences (I have a novel distributed security/composition model, for example).
d
Yes, the "de-Balkanisation" part of the Object Net is very similar to the "itemised" idea - I even thought of calling stuff "items" instead of "objects", but that would actually be just as confusing to techies who know about all this, and a bit less clear to non-techies. My "objects" don't have anything to do with the "objects" of OO - they're very much about first class visible data! And I don't believe @Alexander Obenauer’s "items" are anything like "objects" either, actually. He's involved in Tana, which also says about it being an "Everything OS*"* on the site, perhaps hinting at de-Balkanisation - allowing "items" of diverse types to be mashed up however you like, rather than being imprisoned by a dominant app for each type. I borrowed the idea of a "Lab" from him as it's a nice framing, that frees up the mind! Not sure if he has anything around decentralisation or declarative programming languages, but I don't remember anything like that, it seems to be mostly focused the UX of managing local items. I'll go and have a look to remind myself - hold on ...
Hey, @Ivan Reese - isn't @Alexander Obenauer your work colleague at Ink-n-Switch, now? Why isn't he on this site these days? We could use his input in this thread to prevent my misrepresenting his ideas!
Right, AO does have some stuff on networking as pub-sub and event-action "automations": https://alexanderobenauer.com/labnotes/021/ https://alexanderobenauer.com/labnotes/025/ https://alexanderobenauer.com/labnotes/026/ https://alexanderobenauer.com/labnotes/027/ They seem to sprout organically from the itemised (local-first) ideas, rather than being core to the project - taking up a small percentage of the Lab Notes output.
i
@Duncan Cragg 🤷
n
I think there is an aspect to both your work and AO that are similar - a reclaiming of a person's computational media/output in a way that can be flexibly molded to the goals/task at hand. I feel the underlying technical aspects are more a distraction from these ideas.
I recommend this demo of a reconstituted 45 yr old Smalltalk-78 system, which seems to match both your goals -

https://youtu.be/AnrlSqtpOkw?si=zLPeunoJj_4V0ose

Smalltalk-78 + modern networking + color support sounds a lot like what you both describe
d
@Ivan Reese maybe I should be more explicit - as your work buddy, could you ask him to drop by here some times? 😄
@Naveen Michaud-Agrawal I'm just watching now... 😄
n
What's striking is: 1. After they built a Smalltalk-78 VM in JavaScript, the underlying image they pulled from a 40yr old tape backup ran unchanged 2. The flexibility of authoring/modeling personal media is still unmatched today 3. The entire system is fully introspectable in itself
Here's the paper describing the process of revival: http://esug.org/data/ESUG2014/IWST/Papers/iwst2014_Reviving%20Smalltalk-78.pdf
d
What's most shocking is that they took a photo of the tape dumping ground with the tape visible on which that Smalltalk was found! Wow. Reminds me of the gut-wrenching thought of the BBC re-using the only tapes that original episodes of Dr Who were recorded on
g
Consider a REST API. You can do an OPTIONS request to any URL, and get back the URLs of the types of the thing. At the URLs of the types can be found the URLs of the endpoints that can take a value of this type (or a URL of the value, depending) as one or more named arguments. Also at the type can be found the addresses for Mustache templates to display the value in a variety of standard ways, including: • icon • table celll • table row • table/cell header • form/full page The value can be requested from the URL in JSON, and then fed into any of the Mustache templates. The place where this value is displayed can also offer the operations on the value. This is the simple foundation for a component web.
d
So yes, the Smalltalk environment avoids separation of OS and apps - everything is mashable. But .. it unfortunately went the Imperative way, not the Declarative way. I remember back in the 80s being really excited when I discovered Smalltalk (I think it may have been via Byte magazine - the one with the hot air balloon) - but then being absolutely dismayed to discover that message dispatch passes the flow of control into the target object! There was a thread that followed the message into the target. It seemed like such a betrayal of a potentially brilliant idea.
Found the Byte magazine: https://archive.org/details/byte-magazine-1981-08/page/n79/mode/2up and I'm having an emotional reminisce... 🥹
g
I learned at least as much from Byte magazine as from my Computer Science major.
d
Everyone on FoC should be involved in this thread, to get an understanding of how we are where we are, and how we could have had so much more.
You can understand why Ted Nelson and Alan Kay are so grumpy about things
If only the youth of today would listen to us grumpy oldies.. 🤣
g
The thing I’m grumpiest about is losing the enormous potential of the relational model to the tragically awful SQL.
d
That's a really good "another example" of the same thing happening, yes
@Guyren Howe I don't agree about the "component web" model you suggest. But that's another thread probably...
After poking around in Urbit for a while being utterly baffled why anyone would give it even a cursory evaluation, let alone having such an apparently vibrant community - is it a ponzi scheme? what on earth do people do with it? where does the money come from for those fancy meetings? - here's an article that also has .. questions: https://wejn.org/2021/02/urbit-good-bad-insane/
All I can think is that it's a nutcase project given a huge lift-off when they decided to use Etherium - it simply seems to be worse than vapourware: software that exists but may as well be vapour.
n
@Duncan Cragg you should read Alan Kay's Early History of Smalltalk published in the early 90s - http://worrydream.com/EarlyHistoryOfSmalltalk/. I get the sense that he was dismayed by the version of Smalltalk that came out of Xerox (I believe he had gone to Atari by then), and even more dismayed that nobody used it for what he thought it was really good for (to build the next version of a computing system).
Also it helps to remember that Smalltalk in the early 70s was built on today's equivalent of a $150k machine (I've seen figures that the original cost of the Alto was about $20k dollars in 1972)
k
@Duncan Cragg Being imperative is an easily criticized feature of Smalltalk. But at the UI level, that's what users expect. Tasks like "add a new entry to my agenda" are imperative. And since I'd expect to be able to script everything I do by hand, I also expect to have an imperative scripting language. What I see as the mistake in the Smalltalk approach (and many others) is the idea of a single universal computational paradigm that applies from integer addition and string manipulation to user-level interactions.
n
@Konrad Hinsen Why do you see that as a mistake? It's using the strongest possible model for everything.
k
That's assuming that there is a single "strongest" (or "best" in some other sense) model for everything. Which I doubt.
d
@Konrad Hinsen you'll not be surprised to hear that I disagree! And I do think that declarative is the "model for everything" that works from low-level data transformations up to user interactions. I think Nat Lang's imperative constructs actually cause confusion here. When I say "mow the lawn!" in an imperative holler, what I'm actually doing is expressing an intention for a goal state. And I won't be satisfied until I see that state to my expectation. I have a corny phrase from back in my REST days: "intention puts the system in tension". I know, a bit cringy. But while the state isn't manifest, that tension remains, and can be communicated further: "haven't you done that bloody lawn yet??"
Declarative has been described as "say what not how" - and this is about "what" state you want, not a prescription of "how" it should be achieved
I believe an HX (human experience, UX) built around goals and intended states is, well, better. Worse of all is where you get the two mixed up: is that button telling me the current state, or the state I'll get when I hit it?
k
@Duncan Cragg "Declarative" is easy to advertise as the universally best approach because the label is conveniently vague. "What you want rather than how to get there" just means "let me deal with the big picture and figure out the details on your own". But then, "declarative" is almost the same as "high-level language", "low-code" and many other labels.
d
I think the label is inconvenient to techies because it's not at all vague, it's a total inversion, and imperative-minded techies hate that! An example is makefiles, which techies hate because they need to be in total control, with scripts. I can't see how a, usually imperative, HLL or probably imperative "low code" has anything to do with, say, how you use spreadsheets (or makefiles)? Admittedly the various declarative languages don't do the concept any favours: regular expressions are notoriously difficult, SQL still confuses me, CSS is, well, anyway let's not go there! Part of the problem is tooling: not having a way to try it out and immediately see the results without any cost, but this has improved a lot. I suppose that basically, all these languages are simply hard to learn, even spreadsheet formulae, because they are allowed to be created by techies not HX/UX folk.
k
Makefiles... those programs with "recipes" that are imperative shell commands, right? Plus
.PHONY
targets that are nothing but labels for running shell commands. And variables that are processed from top to bottom, like in any good imperative language (depending on how you write the assignments of course, let's not be overly consistent). There's certainly some intention of being declarative in Makefiles, but the real-life implementation is at best some hybrid. Regular expressions: yes, I accept them as declarative. But they are far from Turing-complete. Spreadsheets, SQL, CSS: I don't know them well enough. But neither SQL nor CSS is Turing-complete as far as I know.
d
Well, nominally SQL and CSS aren't TC, but I'm sure in practice they are. Good points about Makefiles
So, back to the Smalltalk points that led here... Back in Kay's day, Big Tech was represented by IBM, and their "app trap" wasn't surveillance capitalism as it is today, it was the provision of closed, proprietary application Blobs that fragmented and Balkanised a customer's data. You had to pay huge sums to them - effectively ransom money - for access to the applications that allowed access to each type of data they would let you manage: maybe payroll, maybe accounts, etc. If you didn't pay up, your data was essentially lost. And you certainly wouldn't be able to cross-link your payroll or accounts data with data in any competitor's applications. So maybe this was a driver to Smalltalk's particular model of an "OS with no applications" - the desire to restore to primacy the precious users' data. Without applications, you just had all different types of data available to you, all visible and interactable in the GUI, to mash up how you liked. Those chunks of different types of data were called "objects", of course. Kay's objects had methods or messages on the outside - the API - and held data on the inside, inaccessible directly to other objects. So in a way, they were like "mini-Blobs" - they still wrapped the precious data, but at least that data was no longer beyond a user's access or control. Now, my claim is that this was "almost there but not quite", at least if we're talking about non-technical users, faced with the Smalltalk object model; if we want an "OS without applications" that "normies" can use - one that makes their data first class over the rather difficult code. What's missing is what I call "The Inversion". The Inversion is the dramatic choice point that moves you from Imperative to Declarative style. If the goal of an "OS without applications" is to free our data - to restore its primacy in the user's experience - then it's a shame to give up at the last hurdle! Why not go all the way and make data truly first class - all the way down to those little objects? Why not de-Blob the objects too? Just put the data on the outside, and hide the behaviour! That's The Inversion: "What not How". It was still the 1970s when an application was released that did acknowledge the power of the Inversion: Visicalc. With Visicalc you saw the data in your spreadsheet cells before the functions behind them. But the Smalltalk and Visicalc models were never merged into "an OS without applications for non-techies". Which is what the Object Network and OnexOS are doing, right now!
Yes, OK, @Konrad Hinsen and @Naveen Michaud-Agrawal - it took me 2 days to come up with all that! Thanks so much for the prompting from both of you!! You really got me thinking - I always dismissed Smalltalk because of it being the archetypal OO system, and imperative, but now I do see how important it was in the sense where it's not just a programming language, but a more holistic concept of empowering the user.
k
@Duncan Cragg There are plenty of documents on the early years of Smalltalk, which show that the goal was indeed "empowering the user" (more precisely; empowering children!). Corporate-level computing as practiced by IBM was not even seen as an adversary, it was out of scope.