26 ms·
Programs are a prison: Rethinking the building blocks of computing interfaces
- PaulHoule 6y agoSounds like what Microsoft wanted Windows to be back in the Win 3.1 era with COM and all that.
- vortex_ape 6y agoCan you elaborate a bit on what COM was? (or link a resource) I couldn't find its mention on the Windows 3.1 Wikipedia page.
- PaulHoule 6y agohttps://en.wikipedia.org/wiki/Component_Object_Model https://en.wikipedia.org/wiki/Component_Object_Model which is an elaboration of https://en.wikipedia.org/wiki/Dynamic_Data_Exchange https://en.wikipedia.org/wiki/Dynamic_Data_Exchange A common use of COM was scripting with Visual Basic in the 1990s, for instance, ask Excel what is in cell B7, or dynamically load a GUI component out of a DLL and script it into a Visual Basic application. This blends the boundaries between applications in that you might have a Word document that has an Excel spreadsheet embedded in it, and it really does boot up Excel and has Excel render itself in a rectangle inside the Word document.
- vortex_ape 6y agoThank you for the links! > A common use of COM was scripting with Visual Basic in the 1990s ... This sounds nifty!
- cheschire 6y agoIt was! Then the malware came. Those links opened a million security holes that were effectively untestable.
- AnIdiotOnTheNet 6y agoNowadays you still interface with COM through PowerShell scripting, and it is pretty nifty.
- magicalhippo 6y agoIt is used for a lot more. Want to integrate Windows Explorer in your application? COM. Custom property pages in Windows Explorer? COM. Custom folder view ala zip folder? COM. Want Windows Explorer to be able to extract metadata from your custom file format, or Windows Search to search it? COM. Want to play or manipulate video using the installed codecs? COM. Want users to be able to drag an attachment from Outlook and drop it into your custom application? COM. Just some examples. COM is a bit clunky, but it's a great enabler on the desktop. https://docs.microsoft.com/en-us/windows/win32/shell/intro https://docs.microsoft.com/en-us/windows/win32/shell/intro https://docs.microsoft.com/en-us/windows/win32/properties/property-system-overview https://docs.microsoft.com/en-us/windows/win32/properties/pr... https://docs.microsoft.com/en-us/windows/win32/directshow/directshow https://docs.microsoft.com/en-us/windows/win32/directshow/di... https://docs.microsoft.com/en-us/windows/win32/shell/dragdrop https://docs.microsoft.com/en-us/windows/win32/shell/dragdro...
- brazzy 6y agoSo basically what Amiga OS had with ARexx in the 1980s. Edit: I misremembered, that was the 90s as well because it was a later development in the Amiga ecosystem.
- ptx 6y agoThis use didn't go away after the 1990s - Office still uses Visual Basic which still uses COM.
- qppo 6y agoIt's a language agnostic binary interface. It's kind of hard to explain without getting into the technical details of how it works. For many years it was the only stable ABI on windows.
- p_l 6y agoIt is the only blessed API for all new APIs since 2000, I think.
- GartzenDeHaes 6y agoAlso in PRISM for WPF. https://docs.microsoft.com/en-us/archive/msdn-magazine/2008/september/prism-patterns-for-building-composite-applications-with-wpf https://docs.microsoft.com/en-us/archive/msdn-magazine/2008/...
- lowlevel 6y agoSounds like unix to me.
- rakoo 6y agoIndeed, it sounds like the author is looking for the UNIX of the 21st century: * Widely reusable meaning: everything behaves like a file. The types of files we can have are defined by specs: an Image can be described as a PNG file, which every process can understand. A table can be a CSV or a SQLite file. A Conversation can be a maildir folder. We might not have the best descriptions of "things" but we do have something * Data without borders: if you can read from stdin and write on stdout, you can interact with the data. In fact, joining two tables is a base task and can be done with join (https://linux.die.net/man/1/join https://linux.die.net/man/1/join) * Inherent, ubiquitous programmability: I'm not sure I understand the author's point, but it sounds like the entities in a software are too specific to the program. Again, if every "application", or rather set of utilities, used the filesystem with clearly defined specifications for what data is, then they can work together What is not following the UNIX guidelines is definitely the Web and mobile platforms, as the author focuses on. There were some attempts at doing things the UNIX way, like uzbl (https://www.uzbl.org/ https://www.uzbl.org/) where every thing is a script away, or ii (https://tools.suckless.org/ii/ https://tools.suckless.org/ii/) which gives a filesystem interface to IRC conversations. Want to parse a message ? It's just a string in the filesystem, any script can do it. There's a reason it didn't work as well as we want, and it's that in practice it's all clunky and hard to maintain when the alternative is a single, unified application. Especially when the alternative is from a commercial vendor with a lot of cash. The incentives of doing FOSS that interacts with each other are not aligned with making money.
- thesuperbigfrog 6y agoA lot of what you are describing exists in Plan 9: Under Plan 9, UNIX's everything is a file metaphor is extended via a pervasive network-centric filesystem, and the cursor-addressed, terminal-based I/O at the heart of UNIX-like operating systems is replaced by a windowing system and graphical user interface without cursor addressing, although rc, the Plan 9 shell, is text-based. Source: https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs Many of the ideas from Plan 9 were implemented as user space programs on a variety of Unix-like operating systems: Plan 9 from User Space provides many of the ideas, applications, and services from Plan 9 on Unix-like systems. It runs on FreeBSD (x86, x86-64), Linux (x86, x86-64, PowerPC and ARM), Mac OS X (x86, x86-64, and PowerPC), NetBSD (x86 and PowerPC), OpenBSD (x86 and PowerPC), Dragonfly BSD (x86-64), and SunOS (x86-64 and Sparc). Source: https://9fans.github.io/plan9port/man/man1/intro.html https://9fans.github.io/plan9port/man/man1/intro.html
- pshc 6y agoCodebases are, in my mind at least, a virtual space. I believe that one day programs will look like factory floors or cities. They will produce and consume physical analogues for values and types, which you can pick up and examine. Want to debug a function? Strap on your VR headset, teleport into its physically reified room and watch the execution. Tinker with the pipeline in real time. I’ve been dreaming about this forever, and there have been many attempts, but with remote work and VR going mainstream I think someone will eventually build something usable and scalable.
- djrobstep 6y agoSounds cool, although a long way away when we're still dealing with text-based development interfaces right now. Definitely need more immersive environments and fully inspectable programs, and actual graphics in our terminals and editors!
- Tyr42 6y agoI mean, pay Factorio and you can see it.
- pshc 6y agoSatisfactory (the game) too!
- burrows 6y agoIn what way is a debugger not already this? Are you asking for better visualizations?
- pshc 6y agoYup. Visualizations that harness our brains' spatial memory and reasoning, specifically.
- samsquire 6y agoI call this idea If you can see it you can use it and right click use. So if you see a filename on the CLI, you can right click on the file name and interact with the file with a GUI. Or you could hover over a <pre> tag in the browser of some dot syntax or table and right click and click Use. It would run various heuristics over the data to work out what the data is and then import it to the right program.
- djrobstep 6y agoI like your thinking!
- mcguire 6y agoLike the Acme or Wily editors?
- AndresNavarro 6y agoor the lisp machines
- juancampa 6y agoYes!! Here's a link of an experiment I did some time ago to do just what you're describing: https://twitter.com/juancampa/status/1033495489637961729?s=19 https://twitter.com/juancampa/status/1033495489637961729?s=1...
- ptx 6y ago> We need computing environments ... without the concept of applications appearing at all. Platforms keep trying to enable this, but application vendors want to control the UX and branding, so they're not going to provide these generic reusable building blocks. Android, for example, lets apps make use of views from other apps and securely delegate a task (e.g. take a photo, pick a file, etc.) to the user's preferred app without needing to request permission for direct access. But nobody does this - apps just requests all permissions and do everything themselves.
- djrobstep 6y agoAuthor here, yes this is a big problem (the biggest?), as the incentives are all wrong. As I noted in the post: "Often ... apps will have features to integrate with other apps and the wider operating system - but not so much that they become invisible. Instagram still wants you to see its logo, consume its specific content and stay within its ecosystem. Once again, the implementation and architecture are driven by economic imperatives."
- ptx 6y agoAh, yes. But you seem to be saying in the article that these incentives cause the platforms to lack such features, whereas what I mean is that e.g. Android's intents and activities provide just such a mechanism (which could be used to great effect as indicated in the sibling comment about OpenIntents), but commercial application vendors don't want to use it. They would rather control the user experience than integrate seamlessly into the platform. In particular, you mention sandboxes imprisoning the code. But Android allows an app in one sandbox to display an activity (essentially a dialog box) from another app running in another sandbox with different privileges in a way that appears seamless to the user. I could have one app with access to bluetooth (but no camera) call upon another app with access to the camera (but no bluetooth) in order to take a photo. I believe apps can also expose services and data sources (ContentProviders) – e.g. your Images, Tables and Conversations – to other apps and define their own permissions[1] for them. [1] https://developer.android.com/guide/topics/permissions/overview https://developer.android.com/guide/topics/permissions/overv...
- 6y ago
- juancampa 6y agoThis is a problem I have personally spent several years thinking about and working on. The trick IMO will be to build it incrementally from what we already have. For anyone interested, here's my take on it: https://membrane.io https://membrane.io The TL;DR is that I've been building a orthogonally persistent, message-based, user centric, programmable (js/ts) graph
- edjroot 6y agoLooks pretty cool. Have you looked into Pathom (a Clojure library)? Its creator seems to share your vision of connecting APIs from different sources. Last 5 minutes of this video: The Maximal Graph by Wilker Silva - https://www.youtube.com/watch?v=IS3i3DTUnAI https://www.youtube.com/watch?v=IS3i3DTUnAI
- wrnr 6y agoWhy do articles like this keep being written and upvoted? It just keeps raising problems ranging from design, technology, politics and economy. Perhaps the author should try to answer his own questions as an exercise.
- wizzwizz4 6y agoMost of these problems are obvious to me. I can't solve them all, and can't think of them all – and sometimes I have a good idea about a problem somebody else has raised. More eyes on a problem means more solutions, and eventually somebody might come up with a good one.
- orbital-decay 6y ago>Inherent, ubiquitous programmability: Currently, "doing programming" is a segregated activity from mainstream computing - separate software, command lines, specialist knowledge, clunky text-driven interfaces. This must end. Real expressiveness demands that every entity in the interface is inherently programmable - a table of data shouldn't just be a rendered picture of a table of data - it should be a table. Programming shouldn't be separate at all. Almost every attempt at such an environment has failed for a reason. The problem with programming is not the syntax and other particularities, but inherent complexity of explaining the task to a computer. Natural interfaces like modern voice assistants have a lot more chances to succeed than programming, because a) they imitate normal human communication and b) they are less dependent on unambiguous programming. And they are still limited because their fuzzy nature makes them unreliable and unpredictable.
- hedora 6y ago> Almost every attempt at such an environment has failed for a reason. Basic and spreadsheets are notable exceptions. However, they don’t scale to complex programs.
- mcguire 6y agoIf you want to scare yourself, look up reports of spreadsheets with errors.
- bloaf 6y agoSpreadsheets basically run entire massive companies. What is the standard of complexity which this fails to meet?
- dodobirdlord 6y agoPretty much anywhere that depends heavily on spreadsheets also depends heavily on humans in complex ways. Humans are checking that different versions of the spreadsheet haven't gone out of sync, have been sent to the right people, are only updated when they are supposed to be, etc.
- rubyn00bie 6y agoOh yeah; we have/had this-- it is called HTML and none of us got the idea behind it (I certainly didn't); so, instead we re-created the prisons we were, and are, trying to escape. It also is really hard to profit from ONLY meaningful data thus the death of things like RSS feeds. Can't shovel advertisements, trackers, and spyware down someone's throat just sending a nicely formatted HTML table that the client decides how to display and use. Truly, good, semantically meaningful and correct HTML tags used without tons of obfuscating markup to appease some maniac's absurd sense of aesthetic (my own included) would be a pretty sweet API to consume. There's also the subtle reality that nearly every single worth a shit UI designer app, is under the hood, using XML-esque format to describe what you've done... which is mostly akin to "put a table here, with a given convoluted datasource." Things like yahoo pipes come to mind as something that was frankly awesome, and totally failed to find a viable market. Likely because you can't shovel ads down someone's throat and forcefully track their every move sending them only things they want to consume. The continued gating of data is only going to exacerbate the problem; I fear that companies like Facebook (though it's far from the only guilty party) advocate for privacy solely to protect their data monopolies. It will soon become impossible for other players to enter the market because it'll be rightfully illegal to collect or mine that data. Yet, companies like Facebook will still have access to it. I have zero reason to believe their intelligence systems are going to "unlearn" from illegally sourced data or that they can even meaningfully remove it (you really gonna go remove data from those tape backups?). I was reading the other day about folks who want to do link previews but its essentially impossible if you're not facebook because your bot is instantly blocked. So while organizations like Facebook and Google are allowed to freely pilfer the internet of resources for their own bottom lines... and applauded for it. Anyone else is looked at like scammers and frauds. But.. I'm starting to digress and ramble; so, I'll end it here :) Edit: Slight updates for grammar/readability.
- johnisgood 6y ago> the death of things like RSS feeds This is really sad[1]. RSS feeds are amazing. Thankfully they are not completely gone! [1] Actually, the whole state of the Internet is sad.
- 6y ago
- oanepackino 6y agoPostgreSQL has a feature called Foreign Data Wrappers. It's certainly not what th OP imagins, but still pretty cool to query and join external data sources.
- IggleSniggle 6y agoI was not aware of this feature. It is REALLY cool...even if I’m struggling to think of a situation where I would prefer it over doing the “joins” in application code, at least for the drivers I looked at when I searched this space. If “smart” drivers already existed for making sense of schemas across platforms (including performance characteristics that Postgres would leverage) then I would drop everything and go all in on this.
- alexashka 6y agoThe problem this blog post describes, I've been working on for a few years - it's really not a hard problem per se, it's just a lot of meticulous work. I think that's in general the case - most problems in life are problems of you know what you ought to do, but is it what you want to do? Do you want to spend 5 years to try and solve a problem, with no promise of financial, social or personal reward? Do you want to save up for another 5 to give the next 5 a try? Do you want to spend 10 years on a goal that's no guarantee and that most other people will tell you is a bad idea vs working at FAANG? For most people, they are solving for securing a predictable career so that they can have a family and live their lives. What better way to secure your spot, if not by becoming or joining/enabling a monopoly in your little sphere of life? Why is FAANG a term? Because people want to join monopolies/potential monopolies to secure a predictable family future :) That's why software doesn't talk to one another for the most part - if it isn't enabling someone's potential monopoly - it isn't worth doing given most people's life goals. I don't think that's ever going to change unless we establish basic income creative people can raise a family on and I don't see why most people who aren't creative, would be in favor of such an arrangement, so we're stuck with what we've got :)
- gjvc 6y agoa sort of conway's law in reverse, applied to society in general
- WheelsAtLarge 6y agoOOPs was suppose to help with the issue of programming lock in but for the most part it has not advanced to the point where you can interchange program pieces. I think we need to go back to the idea that software can be like building a building where there are basic building blocks that can be purchased from many vendors and let each vendor decide how to improve the blocks and let the architects and engineers decide what blocks to use. Creating software from lines of code is too slow and ultimately it leads to lock in and inability to upgrade. People think that it will lead to a slow down in technological advancement but at the moment we aren't really advancing. We keep on changing programming languages with out much advancement in the ultimate result. It's change for the sake of change leading no where. If you look at advancements in society you will see that once defined standards are put in place then technology moves forward.
- yjftsjthsd-h 6y ago> we need to go back to the idea that software can be like building a building where there are basic building blocks that can be purchased from many vendors and let each vendor decide how to improve the blocks and let the architects and engineers decide what blocks to use Isn't that just libraries and APIs? There's friction when interfaces aren't standardized, but it's certainly a good deal of the way there.
- WheelsAtLarge 6y agoYes, very true, they are a big step forward but standardization is the real key to innovation. It lets society focus its limited resources as oppose to going all over the place looking for a way forward.
- valenterry 6y agoThat's true - but standardization comes at a cost. If the standard is not good or not good enough (even after some time later) then it hinders progress. That's why even easy to standarise things such AC powercables are changed by some companies (Apple, OnePlus) to improve charging speed, because the standard isn't sufficient.
- forrestthewoods 6y agohttps://xkcd.com/927/ https://xkcd.com/927/
- liminal 6y agoThis reminds me of Pink from the 90's: https://en.wikipedia.org/wiki/Taligent https://en.wikipedia.org/wiki/Taligent
- pavlov 6y agoOpenDoc was a mid-‘90s Apple software framework that basically did this. It was also adopted by IBM on OS/2 as part of the technology exchange that also resulted in Apple and Motorola using IBM’s POWER CPU architecture. Steve Jobs killed OpenDoc when he returned to Apple in 1997 because it wasn’t NeXT software. The IBM side of the project had already died at that point as Windows 95 trounced OS/2.
- ribs 6y agoWindows 95, with OLE, which became ActiveX, which is pretty isomorphic to OpenDoc.
- TeMPOraL 6y agoThere's also the wider Component Object Model (COM), which does pretty much everything the author of this article wants, and then some more (e.g. remote objects with network transparency, deep security), and it all works within Windows to this day - but, for some reason, app developers seem to avoid it like fire. I blame COM being a bit annoying to use on developer side, and economic incentives mentioned.
- Someone 6y agoI don’t think he killed it “because it wasn’t NeXT software”. I think he killed it because the market didn’t support it (MS Office showed that an ‘everything but the kitchen sink” solution could conquer the market, leaving only breadcrumbs for smaller parties) and to focus the company.
- skybrian 6y agoThis is a very old-school way of thinking, without any mention of privacy or how to share data safely between different users. As soon as you have multiple users, especially when they don't trust each other, things get much more complicated. Should you really be able to do anything you like with your bank account or DMV record? And do you really want the people you interact with to download all the photos you share? Single-user systems are much easier to deal with, but they're just sandboxes that don't do every much.
- djrobstep 6y agoSeems to me that objects provide a much better way to do security than applications, as they allow permissions to be much more specific and granular.
- TeMPOraL 6y agoThere's prior art for all of that, including object and method-level security, in Microsoft's Distributed COM (DCOM). It can be made to work.
- skybrian 6y agoSure, but if you're doing RPC and it does a security check, this isn't all that different from filling out a form and getting a response. It's not empowerment since you don't get to do anything more with the data than you could otherwise. That's not much like playing with your own data in a sandbox.
- aarondp 6y agoI was not aware of this earlier. I lightly remember that I saw some related articles to this matter but I didn't even thought about it after reading. Yeah there is something thoughtful
- normalocity 6y ago> Think about adding up some numbers in a tabular structure. That's straightforward with most programming languages. But what if that same table is in a web page, or a mobile app, or a PDF? It's right there on the screen, it's probably encoded as a table in the markup. So the data is there. And yet, we can't query it. I mean, it sounds like you're describing command line tools that fetch the data you want, wherever it might exist (in a table, in an image, on the web, across a network link, whatever) and pipes the data you're interested in on the command line so you can use a whole ecosystem of filtering/transforming/combining/querying whatever — even your own code. > Currently, "doing programming" is a segregated activity from mainstream computing - separate software, command lines, specialist knowledge, clunky text-driven interfaces. What's clunky about a text-based interface like a command line, or code written to process simple data in text form or in files or in a database? It seems like you have a /integration/ and /ingestion/ problem, not a programming or app design problem. The issue is that, wherever the data lives, you simply need to get it out and transformed into a format that makes it easy to process it with the amazing and existing tools that have existed for decades. The reason that apps, websites, etc. exist are either because those interfaces aren't built for programmers to consume (i.e. it's for non-technical users, or business people, or some other purpose), or out of ignorance of the power of the command line, or because of personal preferences of the person who designed it. > How do you build ubiquitous programmability into interfaces without adding clutter or reducing usability? You don't. You build integrations and ingestion pipelines to move data from wherever it may currently live into a place that is easy for your system to process. The reason you can't get ubiquitous programmability is because different users/consumers need different things from interfaces, and that's just a simple fact of life. The closest (and one of the most powerful) thing we have that's pretty close to ubiquitous across so many different types of users are spreadsheets. But these come with tradeoffs as well — first of all if you just need the information and don't want all the surrounding capability then a spreadsheet is overkill. If you need rigid validation, and hugely powerful query capabilities then it needs to be in a database. > The realization that the software experience is still built on artifacts of computing from the 80s like text-based command lines is a lot less surprising considered within the context of this ongoing decline. Software is built on these text-based command lines because they work. They're not clunky once you get to learn them — they're pretty much the best thing anyone's ever done. They're still around because no one has improved on them to a degree so significant as to replace them. It sounds like this article is proposing a new way to do things, will which just end up being yet another walled garden. It's absolutely preposterous to think you're going to reinvent 60+ years of advancements in computing when the things that have been working, evolving, and still constantly improving for at least the last 20 years of those 60 years work incredibly well already. > Climate change has shown us that mere awareness of the situation we are in isn't enough. Actual liberation from disaster requires a bold change of direction and a acknowledgement of shared, public goals beyond the financial. Climate change taught us this? Wow. Learn your history. There's /always/ a mix of short-term and long-term research going on, there always will be, and while the mix might change a bit no one part of it has even been completely dried up. Some people and organizations have short-term goals. Some have long-term goals, and lots of orgs fall somewhere in between. Innovation only looks like a really inefficient search and cobbled-together mess when looking at it in hind sight, where you can look backwards and see, "If only the people 20 years ago would have done X, Y, and Z and not wasted time on A, B, and C we would have been in the present 20 years earlier" —- but the major problem with this kind of thinking is that this is only obvious in hind sight, and nobody has the benefit of predicting the future from the present. Is there waste? Sure. But the idea that old stuff is clunky, or terrible, or poorly designed just because you're judging it from modern standards and a place where you have access to more information than people in the past is just silly. You're just going to wind up creating yet another attempt at "solving" computing once and for all. This kind of silver-bullet thinking is naive at best. No one has invented a silver bullet because there either isn't one, or so much collectively learning needs to happen /before/ it can be found that we just need to keep doing the sometimes boring work of trying things and seeing what works. It doesn't feel glorious in the present, but that's what it takes. The problem with judging the past is that there's always waste, you never know which part is the waste and which part is going to lead you to a good solution. The searching (researching) is what gets you there, and it's hard work. > Rare-but-notable efforts like Xerox PARC suffered similar fates, able to fend off the bean-counters for a while but not indefinitely. This is romanticism, and "good old days" kind of thinking. The past is worse in almost every single way, and to put Xerox PARC up so as to imply that modern research orgs aren't probably better in almost every way is a bit foolish. Is modern research flawed? Sure, but so it was in the past as well.
- shalabhc 6y agoAgree. I'm usually very frustrated with the app boundaries, poor system wide integration and so much duplication of work. Another essay about computing without apps is https://humane.computer/killing-apps/ https://humane.computer/killing-apps/
- shalabhc 6y agoA lot of replies are missing the point. It's not "apps integrate better with each other". It is "there are no apps". So what would Adobe sell, if not the "Photoshop app"? It would sell the Photoshop "menu of filters", the "selector toolbox", the "color histogram view" and such. But the workspace where you see the image and apply the selectors or filters would be outside Photoshop itself. It would be a standard part of the system, where the image could come from and go into another organizing system (possibly provided by another vendor). You could mix organizing systems, sharing/versioning systems and filters/selectors/menus/views from various vendors, commercial or free or open source. This would apply not just to images, but to all kinds of media - movies, documents, including "code".
- belugacat 6y agoThe big issue here being that Adobe has zero interest in selling this, and this kind of model would not lead to a $250B market cap business. Adobe wants to tightly control the experience, record how you use the software, display their own branding, try to upsell you on their other products and services, etc etc. Software businesses care about controlling the UX/branding/etc. tightly, because that's where the money is - not selling "menus of filters". That's why every webpage is nowadays is a SPA that hijacks standard browser features like scroll and copy paste and no one looking to make money was ever interested in the semantic web. I'm very aligned with the views exposed in the article and your comment, and have been working on some open source approaches to it in my free time for a few years now. I figure that the only way that it can maybe work is to make something for myself that I love using, and maybe some other enthusiasts will like it too and it can grow a bit from there. But there's probably no way it would ever meaningfully compete with Photoshop, because it goes against every economic incentive that software companies have. In parallel, I also suspect that that's why the design/UX of open source applications tend to be extremely poor in general - great, tight design is expensive and needs strong economic incentives.
- rogual 6y agoYes, open source sounds like the right place for ideas like this, for the reasons you mention. Consider Emacs, whose hundreds of extensions give you this mix-and-match setup, or something similar to it. I think I might really like working with a system that works in this way, with a bit from here, a bit from there -- but I'd want access to the code, because it would take a lot of tweaking to make things nice.
- kasperni 6y ago> We must build much higher level shared meaning - Images, Tables, Conversations and beyond, building a common implementation and understanding used by everybody. Thinking you can build something like this is extremely naive. If you have been working in any company over a certain size. You will know that even inside a single company, people often don't use the exact same vocabulary. For example, what constitutes a product is very different across departments such a sales, production, design, customer service. Martin Fowler talks a bit about in this post on bounded contexts [1]. [1] https://martinfowler.com/bliki/BoundedContext.html https://martinfowler.com/bliki/BoundedContext.html
- djrobstep 6y agoBut we already do this, with a whole variety of different objects - strings, sockets, integers, floats, URLs for instance.
- kasperni 6y agoThose elements you list all have the same single domain: computing. And we spent decades trying to agree on the definition of them in the computing community. On top of that all of them are simple and flat value-based types. Meaning they don't really have any relationship to any other elements.
- mikewarot 6y agoStrings... which kind? Nul terminated, Pascal Strings, ASCII, UTF-8, UTF-16? It turns out that strings might not even be the best way to handle text, ropes look better. (A different thread here on HN) We got close with COM and Windows... as much as I knock Bill Gates, at least he managed to push the clipboard into everyone's toolkit. Imagine if that hadn't happened? What might be possible is to tweak the clipboard a bit to allow the user to set a clipboard boundary in the same manner, but handle the I/O in such a manner as to make it a universally agreed upon object type that can update, and serve as a persistent resource identifier. (Think Ted Nelson's Xanadu) Someone has to show this as a working concept in an open source project, and then some other open source project has to integrate it.
- thibran 6y agoI'm thinking about those ideas since years. For me it is strange that it seems for many such a hard concept to grasp, since the advantages are huge and obvious. Today some tasks like mass renaming of files of a certain type require an extra tool for a casual users, which is in most cases not available and the task therefor not doable. This is a pity and wastes a lot of potential/productivity. If programs where things you could easily talk to - and I don't mean by using a programming language - then filtering and renaming some files should be easy. This kind of mechanism would also allow to blur the line between the traditional desktop, the cloud and AI (something that has been tried before, but failed because the use-case where not compelling). For example, if Microsoft would update Windows in such a way, every user could have some cloud points for AI image recognition per month. If for some reason you needed to do a lot of image recognition, you would have to pay extra. Which would be okay, since using "more resources" creates costs somewhere and we as society agree that someone has to pay for it -> capitalism. This blending of ecosystems and capabilities is where things should be going, but strangely none of the big tech companies seem to pursuer such a path.
- BlueTemplar 6y agoThis would require standards, and then competitors would eat their nice, fat margins.
- DubiousPusher 6y agoAs I recall reading that TempleOS had this neat feature that every function loaded by the OS was available to all other programs. That sounds so powerful. This is one of the wonderful features of Powershell. You have the whole .net ecosystem there you can call into.
- rini17 6y agoI blame C++. Not just that it lacks any runtime type information by default, hindering any attempts to interface with compiled code. Heck, even interfacing with C++ source is hard. It also comes with the mindset that this is somehow an advantage and with derision against other "scripting" languages. For example C is better in this regard, it easier to call library functions without access to source code. And it's equally as fast.
- peterwwillis 6y agoI believe the only way we can push the state of the art at this point is to replace Linux entirely with some new experimental kernels. Linus will never accept a radical departure from his own design. We definitely also need new ways to talk about these ideas (or I/we just need to learn them!). Object orientation is a philistine way to group concepts that have matrices of complexity. For example, there are distinctly different functions of code that most languages I've seen don't provide a syntactic way to express. How can I explain to someone that this part of the code is one part of an ordered set of operations tied to a variety of states influenced by a variety of functions, while some other code is idempotent and stateless? And can't our compilers take advantage of this to connect the pieces for the developer?
- ralls_ebfe 6y agoI have pretty good integration of different text based applications inside of emacs.
- 1penny42cents 6y agoThis is a great idea that would change computing for the better. That said, one angle I sense here is blaming. It's easy to dream and blame, it's harder to build and lead by example. It'd be great if this post was a "why XXX" page in the documentation for a new platform which implements the said ideas.
- adwn 6y ago> It's easy to dream and blame, it's harder to build and lead by example. It'd be great if this post was a "why XXX" page in the documentation for a new platform which implements the said ideas. That's because these grandiose visions are just that – dreams. It's one thing to imagine a user's utopia of infinite possibilities and write a blog post, and a completely different thing to go and implement it. It typically falls apart when confronted with the messy reality of the real world and actual code. That's why you see a lot of those posts, and never anything that goes significantly beyond some toy examples, if at all. Compare the author's misconception that there's little inherent complexity in summing a range of cells in a spreadsheet [1], an idea that won't be entertained for long if you actually implement a general-purpose spreadsheet application. @djrobstep: Sorry for the harsh words. I've heard too many of those visionary ideas (including my own), and have never seen them amount to anything (see also Alan Kay's vision of software inspired by biological cells and systems – lots of talk, no non-trivial proofs of concept). I would be delighted to be proven wrong, so please don't let this post bring you down. Start building! If you succeed, feel free to rub it under my nose :-) [1] https://news.ycombinator.com/item?id=25020363 https://news.ycombinator.com/item?id=25020363
- artem247 6y ago> (see also Alan Kay's vision of software inspired by biological cells and systems – lots of talk, no non-trivial proofs of concept). I just wanted to say that actually Kay's vision was implemented in something very non-trivial, both on the hardware side - Alto, and the Smalltalk operating system. They were used by real people and exhibited lots of traits that this article talks about. And some of their ideas were hugely influential in mainstream computing. I love the demo of one of the Smalltalk programs in this talk by Alan Kay [0], starts at around 40:30 [0] - https://www.youtube.com/watch?v=p2LZLYcu_JY https://www.youtube.com/watch?v=p2LZLYcu_JY
- joduplessis 6y agoInteresting article, but somewhat of a false dichotomy. > This absolutely hasn't eventuated - once again, applications are the problem. Photoshop's codebase and Instagram's codebase no doubt have sophisticated Image objects defined, but each only exists within its gated prison. Photoshop & Instagram's "Image object" are not what make them good. What makes them good is their "Image object" in the context of their eco-system (app/platform/userbase/DESIGN/integrations/etc). A building is (and has always been) the sum of it's parts.
- sergeykish 6y agoWorld is moving in the opposite direction. Reality check: * it would be nice if we could fix own device. * it would be nice if we could install own software. * it would be nice if we could fix own software. * it would be nice if we could combine programs. * it would be nice if data was not tied to application. Most of the users could not utilize their freedoms. UNIX users could create and share programs, glue them with pipelines, beyond "user" level now.
- chrismorgan 6y agoI think that we actually do already have a lot of the relevant primitives in one place: accessibility APIs. It would be interesting to see experimentation in using this data for more than just screen readers and the likes, so that you could do things like slurp a table of numbers and add them up regardless of which program it came from (—though PDFs are unlikely to pan out, because the tabular structure is typically just not encoded in the file). On macOS, there’s AppleScript which can, I believe, achieve some of these sorts of things using accessibility APIs and similar. I’m not familiar with the extent of its capabilities as I don’t use a Mac.
- imhoguy 6y agoComputing "prisons", or better call them boundaries, are result of evolution, limited trust and need of control. Agreed, computing systems simulate human social structures. BTW this article reminds me Windows OLE https://en.m.wikipedia.org/wiki/Object_Linking_and_Embedding https://en.m.wikipedia.org/wiki/Object_Linking_and_Embedding
- simonh 6y agoThe nearest I've come to working in an environment like this is a system called Quartz developed at Bank of America. It's a massive set of infrastructure and code based on Python. It consists of a variety of services such as a distributed synchronised hierarchical object store, a set of compute grids, a web server farm, etc. All the code is in a massive code repository and is world readable by any developer in any team, with the configuration for everything in a single config hierarchy based on YAML. To create a batch process you just commit the code, commit the config for where and when you want it to run and on which host group, and you're done. You can even develop desktop apps running a copy of the runtime locally. Because everything is Python (obviously low level libraries were done in C or C++) and exposed to python APIs, and all the Python code was available it was very easy to develop interoperable applications. Of course there was huge duplication, but it was an incredibly fun system to work on. I really miss it. The previous iteration of it was actually called Athena and developed at JP Morgan by the same team, who were later hired away by BoA. Even before that they developed the original version at Goldman Sachs, but that wasn't based on Python.
- DougBTX 6y agoThere are hundreds of libraries and packages for dealing with images which can all be mixed and matched together. So maybe Instagram and Photoshop don’t participate in that open ecosystem, but that’s their choice. If you want to use the concept of `Image` it is an import statement away.
- BlueTemplar 6y agoThis is one weird article. What it wants is standards, but the word is never used. What it wants is the Unix philosophy-like micro-programs, that "Do One Thing And Do It Well.", but no mention of that either, except in drive-by disparaging text-driven interfaces that most of these currently use…
- wcoenen 6y agoThe article also made me think about the Unix philosophy of text pipes. I think Powershell is a step further in that direction, as it it allows you to pipe typed objects between scripts and cmdlets. It's just not clear to me how to extend that idea to a GUI-centric environment like a smartphone.
- davidkell 6y agoThe two places I’ve seen this working best today: - Open source data science/scientific computing ecosystems. Notably python, where all the libraries interop seamlessly via numpy/pandas/arrow and Jupyter is the visual coding platform. But also R/tidyverse and Julia. - Modern “no-code” tools, where the visual coding is Notion/Coda/Bubble, interfaces via Zapier/Integromat/Autocode and data models in Airtable/Sheets. (Many of these tools use the word “block” as part of the UX) And ofc, we take it for granted but the concept of a “file” is the ultimate building block for applications. In my experience, commercial disincentives aside, the main trade off for this power/flexibility is the complexity. It is intimidating for new users, and hard to design well for because of the combinatorial explosion of interactions. Users need to be strongly motivated to get over this complexity hump - whereas most users, most of the time want a single happy path. Personally I don’t see this as a negative thing - you are essentially coding best practices into the tool. As an aside, the instant feedback coding in python looks fantastic! Could be a fantastic extension eg for Jupyterlab or VSCode.
- Jugurtha 6y ago>And ofc, we take it for granted but the concept of a “file” is the ultimate building block for applications. Yes. I love me some abstraction and building blocks. We constantly think about them because it helps the product be flexible by design in situations we haven't thought about. Similar abstractions and building blocks or "units of computational thought", although not "perfect": Docker containers, Jupyter notebooks. >In my experience, commercial disincentives aside, the main trade off for this power/flexibility is the complexity. It is intimidating for new users, and hard to design well for because of the combinatorial explosion of interactions. Users need to be strongly motivated to get over this complexity hump - whereas most users, most of the time want a single happy path. Personally I don’t see this as a negative thing - you are essentially coding best practices into the tool. I agree. Complexity is not going anywhere, it just is a matter to decide who inherits it and at what level. For example, we're making our machine learning platform[0] after years of custom ML products to help us. We have different profiles: some of them can move between training a neural network, building custom connectors for esoteric data sources, setting up infrastructure, and running cable. Others live and breathe in a notebook who have trouble setting up the proper environment. What we do is that we build a product that handles most things for the latter profile, but gives the possibility for advanced users to tweak things. One of the reasons we haven't adopted other products is that because they were way too restrictive. Point and click, no API, use custom non time proven abstraction, etc. It's also because in our years of actually shipping machine learning products for paying enterprise customers, the problems we faced in machine learning projects were not for lack of snappy CSS or animations. In other words, the products we had seen were solving non problems for us. We keep an eye out for products made by people who actually shipped ML products, though. That's one of the reasons we built functionality on top of JupyterLab, like near real-time collaboration, scheduling long-running notebooks, and automatic tracking, instead of wanting to re-create the wheel with "Our Way (TM)". - [0]: https://iko.ai https://iko.ai
- sriku 6y agoI think to some extent at least, having an open-to-extension capability like what Julia offers (open multiple argument dispatch) could help with this. This isn't at loggerheads with the idea of an application, but let's such applications share concepts - where app2 can extend app1's concepts by defining more specialized methods. So if Instagram exposed an "image" concept (which might be named Abstract image in Julia) , Photoshop should be able to run with the provided capabilities and specialise a custom notion of image as paint on canvas" or illustrator can add "vector drawing" capabilities. Then, depending on how the specialization is done, it would be possible for Instagram to post vector drawings. (Simplifying a bit to illustrate) This is a common enough pattern between libraries in Julia dedicated to doing very different things and yet cooperate beautifully.
- TeMPOraL 6y agoMicrosoft's COM shows that you don't need any magic features in your language - just regular late binding for functions. You can interface with COM components - the one mainstream implementation of what this article is describing - in programs written in C. Because underneath, the whole thing works by asking the OS to give you an array of function pointers in exchange for a UUID.
- sriku 6y agoI'm familiar with COM and I do think the kind of interoperability you get with open multiple dispatch is of a different character altogether. There has not been any theoretical reason why this has to be true yet, but empirically it has been surprisingly powerful in Julia. I guess Common Lispers would relate to it too.
- Poefke 6y agoI like where this is going, I have been thinking about similar problems lately and, inspired by a talk from Alan Kay, started writing down a research direction for a solution. I'm looking for feedback and other people interested in this. You can read the whole thing here: https://hackmd.io/kafpxBeqQua_rcrncP14tQ?view https://hackmd.io/kafpxBeqQua_rcrncP14tQ?view TLDR: I'm thinking of building on top of the browser a universal document standard, which allows for interactive documents that contain the application you need to render it, but also to get data from it and link it to other documents. I'm thinking of using IPFS as a storage mechanism to get stable links. Iframes to securely compose documents, using a bootstrap javascript line as the only requirement for any document format. A message bus system, using iframe postMessage api, to connect all documents. I'm in the pre-design phase, there is no code, just thoughts.
- phkahler 6y agoI'm not entirely sure the author understands what software is or how it works. Photos are stored in standard formats. Your web browser can probably save images for you that could be opened in photoshop's. If you want drag and drop that could be done (browsers dont allow you to drag out AFAICT). But filters are software, not data. Someone could try to create a standard way to define filters but then each program would need to understand that. I like the idea of dragging a filter onto an image in any program and having it apply there, but that means the filter has to be some independent piece of code implementing "the image filter API". Would every app need to know how to apply those, or would the UI toolkit have means of presenting images that all apps use and that knows how to apply filters? Not only does this require extremely good design of abstractions, it requires a very open system that seems to go against commercial interests. In the long term I think commercial software has other similar issues, but we need an alternative means of paying developers before that can change.
- eternalban 6y agoA suite of data format standards will achieve all this without having to resort to a (hand-wavy) half-baked notion of standardized set of data processing modules (aka “applications”). And we’re already doing this, and I am certain the OP has also modified data created by one application with an entirely distinct other application. Overall, OP fails to provide a lucid and compelling reason for speculating about a half-baked notion that supposedly solves some poorly defined problem. (Repeat: interop is optimally done via data translation. Local coupling that allow for eco-systems of loosely coupled (via data) applications.)
- thomastjeffery 6y agoI made an analogy in another comment that I think is a really great expression of this problem: Programs are like houses. They are made of walls. Traditional UI gives users doorways and windows, but users are not allowed to pass through walls. Even the most liberal programs that allow users to redecorate or even move walls do not give the user ultimate and immediate freedom. Say a user wants to make a new room. They can move some walls around and shove the room in the space left over, but where do the doors in that room lead? In order to make deep refactoring UI changes, the user must undo the careful design that developers gave them. The ultimate freedom would be for the user to rebuild from scratch, but that's too much work, right? What if the house was entirely configuration? What if every wall was optional? What if our program was fundamentally just an empty floor with an optional example house built on it? That's what we almost get with shell commands. That's what we almost get with web browsers. That's what we almost get with Emacs. That's what we almost get with tiling window managers. I've never seen an ultimate instance of this. I have, however, seen a trend away from it, and that trend is frustrating. This topic is something that is vitally important to software design, and yet we don't even talk about it. We just keep rolling with the status quo until someone breaks down a wall and becomes a hero.
- whiw 6y agoA list of requirements to help make the OPs vision a reality might be:- 1. Separation of concerns (ie, make it trivial to separate the Data and the View components from the surrounding html clutter). Currently it can be a pain to extract data from the DOM. 2. Allow the Data component to express arbitrary data shapes, including at least: - 2-D tables - n-dimensional data tables - groups of related tables and schema (for a relational database) - sparse data sets - lists - trees - graphs A lisp-like representation of data would provide adaptability to arbitrarily shaped data. 3. Make it easy to use:- The webpage coder would write <html> <head> <data name="data1">...lisp-like-data-structure...</data> </head> <body> <view name="view1" data="data1">...view-code...</view> </body> </html> If no View-code was provided in the html then a default OS/browser View would be used. 3. Ideally HTML would provide native support for the Data and View primitives. Failing that then it could be provided by a script (hosted on a single website, to ensure consistency of interpretation). 4. Ideally the OS would provide support for the Data and View primitives, in the GUI and in the command line. Failing that then these could be provided as user programs. 5. Encourage webpage developers to use the new <data> and <view> primitives by deprecating <table> ;)
- fleetingmemory 6y agoThe first thing that should be considered is security. I 'm writing this from a computer which has been hacked over and over, and could very well be caught right now in a man in the middle scheme. Once you've got a serious security model baked in, you can start to imagine other things.
- WhyNotHugo 6y agoI do feel like iOS is moving in this direction. My photos are in the photos app (and they're not "files"). I can tap share, and send them to WhatsApp / Telegram / Email. This somewhat unifies the "photo selection and sharing" interface of all applications in one place. It's also good for security since I can deny all these apps access to my library. Also, on any app when saving an image, it also goes into photos. There's no filesystem, it goes into a dedicated "photos" storage, and I can later find it there to use it for whatever (also, copy-pasting images in modern OS's is fabulous). It's quite clear that he proposal from the article aligns well with slowly shifting away from a "files" mentality. Honestly, I'd love to see a "Photos" app on Linux that handles all my images files, and stop using the cli / file manager to treat them as files (e.g.: drop one level of abstraction).
- carapace 6y agoLook at Prof. Wirth's Oberon project and Jef Raskin's "Humane Interface".
- gumby 6y agoPrograms these days, dating back to the arrival of the PC, are roach motel silos. When you use two or three programs to work on a problem, each program often maintains its own state -- on mobile, often data files as well. In the "old days" you could work on a task with a single directory (or tree) holding source code, documentation, email, etc and your editor, email program etc would work fine. Now my email is in its own tree, slack messages theirs, bug reports their own, and of course source code in a source tree. What a massive regression.
- wangketuo 6y agohello!i m from china,english not good,but for this idea i have thought for 5 years,so i want to say something for this idea,i want mention : Data is not the core, but the value is the core. All the programs on the Internet have barriers, not because there are barriers to data, but because there are barriers to value. I've written a lot about the cost of developing the World Wide Web, and only by lowering the barriers to development and allowing more people to participate in the building of the web's "value program" can the vision of the Web truly be realized. The closure of the program itself is not the closure of data, but the closure of the value of the scene, is the closure of the construction of the scene power, I have a product prototype design.
- deleted 6y ago[deleted]
- wangketuo 6y agoI've read a lot of discussion about "app barriers", but there's a general confusion about how such a "wall breaking" dream would work. We say that there are barriers to application because only the enterprise has the ability to develop applications, and this unbalanced entry barrier is the source of the world Wide Web's inequity. Applications are for the profit of enterprises, so only enterprises will build applications according to their own needs and profits. This is the core issue of web2.0, and also the key to the optimization of the future network. That means enabling everyone to build applications that suit their needs and profits with the help of Internet tools. So, if we go back to the basics, decentralizing data is not the point, and enabling everyone to build value scenarios with the help of the Internet is the real problem facing the Internet upgrade. When we have a clear purpose, all discussions and actions make sense! Only around the goal, all the streams will join a big river, and run to the sea! So how can we empower individuals to build value scenarios? 1. A modular front-end UI design The modular front end can create all the value scenarios in the world. 2. Create a network of power and stakeholders for everyone All the benefits and administrative rights of the application must belong to the owner. Enterprises naturally have this management structure in the current network, while the network power and interest subjects applicable to everyone need to be redesigned. The design is simple, we just need to create a concept of "scene" on the network, the scene is the basic beneficiary of all management and money power. 3. Place the new structure in a scenario where it can empower For enterprise applications, the best scenario is the application market, while for individuals, the best scenario is their own life scene, is all the social scene, business scene, residential scene.
- wangketuo 6y agoI've read a lot of discussion about "app barriers", but there's a general confusion about how such a "wall breaking" dream would work. We say that there are barriers to application because only the enterprise has the ability to develop applications, and this unbalanced entry barrier is the source of the world Wide Web's inequity. Applications are for the profit of enterprises, so only enterprises will build applications according to their own needs and profits. This is the core issue of web2.0, and also the key to the optimization of the future network. That means enabling everyone to build applications that suit their needs and profits with the help of Internet tools. So, if we go back to the basics, decentralizing data is not the point, and enabling everyone to build value scenarios with the help of the Internet is the real problem facing the Internet upgrade. When we have a clear purpose, all discussions and actions make sense! Only around the goal, all the streams will join a big river, and run to the sea! So how can we empower individuals to build value scenarios? 1. A modular front-end UI design The modular front end can create all the value scenarios in the world. 2. Create a network of power and stakeholders for everyone All the benefits and administrative rights of the application must belong to the owner. Enterprises naturally have this management structure in the current network, while the network power and interest subjects applicable to everyone need to be redesigned. The design is simple, we just need to create a concept of "scene" on the network, the scene is the basic beneficiary of all management and money power. 3. Place the new structure in a scenario where it can empower For enterprise applications, the best scenario is the application market, while for individuals, the best scenario is their own life scene, is all the social scene, business scene, residential scene.