299 karma · joined January 17, 2018
And that drawback obsoletes the strategy it seems, unfortunately.
It's an interesting problem, how to provide full access and control as well as non-corruptible recovery systems.
One of the biggest problems I consistently run into is that printing to the screen is a slow operation, every learns this day one of any graphics work, but things like console.log or Node.appendChild are the primary way to destroy someone's computer for a short period of time because orders of magnitude more operations are queued up before they can complete. I wonder if painting operations could be limited to some max number per second to prevent that orders of magnitude queue problem. And, more importantly, how do you code that limit?
All good ideas, thanks for sharing.
Web workers are interesting and relevant to this use case, however the almost total isolation doesn't lend itself to manipulating the DOM without the user explicitly writing a custom API to interpret the worker's messages. So, back to the same problem.
Thanks for the link.
I'll do some digging into chrome's sandbox[1]:
[1]: https://chromium.googlesource.com/chromium/src/+/master/docs...
I'll have to look more into async stuff. Great eval article there. I've found these four lines to work for importing content[1]. I dove into realms[2] and the realms shim [3] a while ago after reading about Figma's engineering behind plugins [4] but I never figured out how I might use that for my system.
You might take a look at how the codemirror author built his book [5] and editor [6] in this repo [7]. He implements the loop detection I derided in my first comment. I shouldn't be so harsh, it's a good and simple idea. It's just not an answer, more of a hack. My interests align pretty well with the p5js editor audience[8], so some of the early issues there convey why the simple loop detection isn't ideal.
I'll drop you a link soon!
[1]: https://stackoverflow.com/a/5282268 [2]: https://github.com/tc39/proposal-realms [3]: https://github.com/Agoric/realms-shim [4]: https://www.figma.com/blog/how-we-built-the-figma-plugin-sys...
[5]: https://eloquentjavascript.net/ [6]: https://eloquentjavascript.net/code/ [7]: https://github.com/marijnh/Eloquent-JavaScript/tree/master/h...
[8]: https://github.com/processing/p5.js-web-editor/issues/174
I've been working on something similar on and off for a while, and I've found the space to be fascinating and somewhat puzzling. Most of the first questions I try to ask about these in browser notebooks don't have clean answers. In no particular order:
- Do you have any ideas about solving logic errors? As it stands right now a while(true) loop crashes the page and consecutive re-openings of the page for a short while (in chrome). What about things like document.body.innerHTML = "" (you actually seem to handle this pretty gracefully, I'll see if I can poke more holes in this another time). For what it's worth none of the online notebooks I've seen have a satisfactory solution to infinite loops, loop timeouts are too blunt an instrument and crashing the tab can take the browser minutes to recover.
- Is there a particular reason you use eval rather than the new Function constructor? From what I've read using new Function is much more performant, and other than different scoping a better choice than eval. Can't find the link at the moment, but it was wrapped up in the mdn[1] design docs for their codebox examples.
- I see you're using the first codemirror 6[2] beta release, how are you liking it? I really enjoy the interface so far.
- Do you have any favorite resources or inspirations about why you went about building a hackable offline local first notebook environment? I particularly like the experiments at Ink and Switch[3]. (many related hn submissions). As well as webstrates[4].
My attempt at this game is to break out of the notebook style single column layout and embrace an art board style canvas, which is a rather radical idea in that it is not obvious what that should look like or how basic interactions like hierarchies or execution order should look, but fun to explore. I also desperately want to prevent crashing as a result of logic errors and workflow footguns(like deleting DOM elements or overwriting storage), to that end I have a separate storage of scripts to rebuild a "safe boot" interface, but there is more thinking to be done here.
I look forward to poking around your code some more soon. Thanks for posting.
[1]: https://developer.mozilla.org/en-US/ [2]: https://codemirror.net/6/ [3]: https://www.inkandswitch.com/ [4]: https://www.webstrates.net/
Edited out a question about your motivations. I reread your comment and the about page and I realized my motivations are similar to yours. While observable doesn't have a few of your key points, it is a fantastic product. The reason I don't settle on it is that I'm interested in experimenting with the environment outside of a notebook-with-cells interface.
The article is cool that it takes a dive into the "odder" boxes and finds a flaw or two. The author also recognizes the arbitrary nature of the map. I imagine that almost any other filtering would be more interesting to geek out over though.
I am somewhat surprised by the popularity of this post here and on reddit, but then again that is sometimes how popularity works. The piece is presented well, just meaningless.
Property and ownership also has a unique definition for the United States, and the "wild" referred to in this conversation is owned by the government, plain and simple. With this perspective it should be clear why individuals cannot just go out and "do whatever they like" even if this is a hypothetical argument. There is no un-owned place in the United States. There are positives and negatives to this reality, but it is reality and should help to ground the conversation.
I wonder what another model that could fit the massive expanses of space set aside in the Unite States; certainly one with a less consistent hierarchy of responsibility would be worse than the current system. It is also important to realize how artificial the "wild" is in the United States given the American philosophy of individualism and property ownership, especially given the status of the population as exceptionally empowered by rights, wealth and technology. I say artificial because without the organization that protects the wild spaces, they would not exist as they do today.
It would be interesting to discuss the meaning of "the wild" or its equivalents in other cultures, as I imagine we would see an incredible variety of meaning. I, however, have mainly experienced and philosophized about the American and European wilds.
I deeply resonate with the sentiment expressed by the Alaskan ranger in the top level comment. As a guide of private and commercial expeditions I am constantly amazed at the alternate realities of understanding and respect people have about wilderness and I cherish my role, however small, as an ambassador to the wild.
I know a few Search and Rescue workers, volunteers and Rangers, they regret their job as babysitters for the incompetent but command respect by outdoorsmen. They are essential to the wild as we have it in the United States.
I used the word unique in this piece too much, but there are a number of special things about the United States and the American psyche that are central to this conversation. I do not claim these perspectives are right or correct or ideal, but it is how I see it today.
I have been reading Sutherland's Sketchpad thesis, and it struck me that no aspect of the system was unavailable to the user. By itself, this isn't entirely unusual, I think the same could be argued for emacs or linux in various ways or even of software when code is available etc. The unique aspect of this universal control with regard to sketchpad is that it was a graphical system. Controls for the graphics and viewport were essential, and reflected by the development of the first oop principles of master/instance and recursive expansion of arbitrary material in the workspace. Of multiple viewport movement controls (physical dials too!) and focus-selection zooming.
It is easy to imagine extensions of sketchpad with graphical macros. Of savable viewport state, of non-euclidean jumps between locations on the digital "paper".
It's funny to me that most clever things I enjoy about vim seem like they could fit right into a graphical system like sketchpad. `mkview`, marks, folds, repeat operations, contextual movement or selection like accessed via combinations of `[{(`.
Infinite canvas artboards are fantastic workspaces, but lack even the basic "focus shifting ability" of a few stacks of paper on a desk, taped on a wall, or strewn across the floor.
edit: video here https://www.youtube.com/watch?v=dP1xVpMPn8M "A Tour of the Acme Editor" by Russ Cox
Ronin in particular is the most fascinating piece of this network to me. I was hooked by the (broken) version 1.0 when I first found it a couple years ago and played around a bit with fixing it. It played well with a few other key influences in my life and I've been playing around with similar--albeit prototype--systems ever since.
To name one stand out feature. I have been playing around with generative design/creative coding/coding art for a while now and I seem to be on an edge of the domain. My work lately has been increasingly taking a set of starter points, so to speak. I have shapes or layouts in my head that I want to run through the generative process, but I am distinctly starting with these hard coded values.
Ronin provides direct manipulation on the canvas with `$` prefixes in the code. If you type `$point`, then click on the canvas, "$point" is replaced with code representing that point. The simplicity of this interface for writing code that heavily involves numbers in context (ie on their domain) is an inspiration. There are probably a couple of names for this connectivity, but one might be bi-directional evaluation. Manipulations in code yield the canvas, and manipulations on the canvas yield code.
There's a lot going on here, xxiivv.com
And some fun to be learned by poking through git commits. If you know Orca, (was popular here a while back) it didn't start as a music generation system.
Edit:
Ronin tutorial video, 5:22. First 30s tease the original version I saw. https://www.youtube.com/watch?v=SgAWGh1s9zg
Old version tutorial/demo 4:09 : https://www.youtube.com/watch?v=gifzjhyBwOc
As I said I used it in my full class load for a month then entirely gave up on it. Too many papers and too many large documents of notes, I have much more reusability and ease of access and searching my pile of md documents next to a pile of PDFs (I write `zathura path/to/paper`) at the top of each section in my markdown doc that I edit in vim, then when I want it open I put my cursor on it and hit `gx`. This beat out any OneNote workflow I could figure out in a month of daily use.
Searching the text of pdfs just failed in 3/3 tests I tried going through my old notes to find a document.
- Dropbox Paper specific items like +LinkToDocument, @Person, #tag
- Digital Paper functionality like stylized tables /note red, creates a red box and puts your cursor inside it
- literally just two commandline tools /date, /time
These are all much more convenient than clicking GUI buttons to get these formatting options yet incredibly limited. There are on the order of tens of these capabilities in any similar application. Notion, Slack, TiddlyWiki, etc.
I can think up hundreds of keyboard-text -> computer-things. Sure they are basic and understood processes, but unless they are built by a developer for a walled garden application you can't really have them. In general, this is one of the reasons I primarily use vim/emacs and linux, so I can build my own interface for my computer. But I'm interested in bringing that textgrid customization into a canvas application that supports more media types than text. vim + repl + powerpoint. Keyboard driven, mouse driven, stylus driven and as powerful as a computer can be.
- I can highlight 3 paragraphs and type /column to make a three column layout.
- I can type /tabs to create tabs in my document ala tiddlywiki tabs.
- I can link statusbar like information into a document with /uptime and document how much time this document has been open.
I would like these capabilities in a shared document system to be able to work collaboratively on a higher level than text, and with more programmatic options than the tens that these applications provide.
I think I can't express this well and I'm really at the beginning of thinking about it, thanks for taking the time to read it. Maybe there's nothing here and this is just a manifestation of my frustration of using a computer.
[1]: things I can type on my ~80 or ~100 key keyboard.
Examples: - italics in a live markdown editor usually hides the asterisks after you've closed the pair, but can get them back if you backspace with your cursor at the 's'. - [[]] style links in similar live editors hide/show content as the syntax has been designed to do.
These examples do it for me, the author, not just in publication.
Other examples include CAD software array-style duplication as a single example. Draw one thing, give a command like "copy 10 times" and then move the piece and see 10 copies laid out.
I can imagine using something like that `define` example in m4 and wanting the instruction to propagate throughout my text file, yet retain the command as a sort of undo/toggle option. Again, all for me the author as I think through my work in this editor, publication isn't really the point in these thoughts.
The workflow for applying formulas to org mode tables is fantastic. I'm still an absolute novice, but I can keep an array of TBLFM formulas[1] below my table which I write and execute at will (C-c C-c or ,,) and can retain as a sort of history of the table state. There seem to be an endless variety of hooks I can tap into for these kinds of table editing sessions.
I'm thinking about this in the context of the process of doing research and writing. When my thoughts are not concrete, I do not have a formal document I'm writing but I'm learning and thinking and connecting information. I am in the process of auditing a whole load of these tools and I want a tool that is the superset of all functionality I see, not sacrificing the awesome transclusion of TiddlyWiki or internal links in org mode for the drawing abilities of OneNote.
I think what I want is an exceptionally powerful "viewport" for lack of a better term. I take great inspiration from ZUIs and wonder how to apply the fantastic text based tools I know to a semantically zooming canvas. I don't like directories, I do like juxtaposition of disparate thoughts and projects. Can I have an AutoCAD/OneNote/orgmode? I want one. m4 seems inspires me towards this goal, even though I realize that's not exactly it's intention.
[1]: https://orgmode.org/manual/Durations-and-time-values.html#Du...
Low floor, high ceiling is the best case for that framework, and should be every toolmakers ideal.
The Airbnb story reads like a sign of the times. Platforms can do as they like, users just have to conform. PCs and the internet promised the kind of programmatic control described here(I wonder if there is a better term than "programmatic" control?), end users should be able to come up with arbitrary representations of the data they query on the fly and realize them as quickly as possible.
Web UIs are stupidly underpowered, table based queries for flights as presented here seem much more usable. Michel Beaudouin-Lafon has a few great ideas to explore here, "One is Not Enough" which he described in a different context but I think can apply to the desire for composability between multiple tools here (Airbnb + walkability) and "software is not soft" describing the boundaries placed on software users. I have many tools for manipulating strings or sorting numbers, why can't I use them on the Airbnb table listings, served up on my computer?
Thanks for sharing.
E:
> That even control freaks like Apple, who like to think only they know what's best for their consumers, doesn't use a tiling only WM in their OS is telling.
I don't think so. Like any other pro tool it has a learning curve which without a little time investment renders the tool useless. I think the only telling thing about Apple's choice of window management features is that they shoot for the lowest features possible so that users can learn them all as quickly as possible. On-boarding > user control for Apple.
I think the GUI that Apple ships is successful in so far as all of its features are literally visible. You literally have a mouse and a clickable pad, you always have maximize/minimize buttons. Any more advanced software has "hidden" features in that they hide behind menus and hotkeys. Though everything that is hard about "modern" computational interfaces is that discoverability is shit, see [1]
[1]: https://www.fastcompany.com/3053406/how-apple-is-giving-desi...
The pen regularly is not recognized, the entire computer freezes for 2 seconds when rotating including stuttering video and audio. The entire computer freezes for 1s when opening the keyboard which happens for me two or three times every five minutes of active work in OneNote. I've done about 20 hours of work in OneNote now and couldn't recommend it to anyone for any workflow, not formal design work, not annotating PDFs, not drawing, not storyboarding or wireframing or writing by hand. I only keep using it hoping I'll stop hitting it's fail cases by learning it all and that has yet to happen. I plan to try out the iPad next week. Any other recommendations for a thinking workspace with digital pen?
I have a list of 10-15 OneNote peculiarities that seem insane to have made it into production, and that OneNote is almost unusably laggy on Microsoft's latest device is wild to me. They center around the virtual keyboard and non-ink object selection and manipulation, of which there are zero official Microsoft tutorials or manuals. There is no way in OneNote on the surface to "exit" an action, selection or keyboard. Any tap will open the keyboard, cycling the 2x 1s freeze for opening and closing the keyboard. It's maddening.
I piled standout quotes below.
I think a big takeaway from the intersection of Bret Victor, Alan Kay, Jim Hollan and the ink&switch folks and your work is that the right dynamic interface can be the "place we live in" on the computer.
Victor shows a history of interactive direct manipulation interfaces, live environments where explorations of models or the creation of art go hand in hand with everything else related to that task: data input, explicit (programmatic) requirements and the visual output.
Hollan and ink&switch show the environment (ZUIs, canvas) can contain everything for doing work, the code alongside any manipulation of the viewport that can be conceived. Tools infinitely more advanced than Microsoft OneNote and designed 40 years ago.
From what I know about your work, I see another take on the environment I want to live in on the computer. I dont understand why I would want to lose power by stepping away from my language/interpreter/compiler/repl into a GUI or some portal when I can bring whatever it is which is nice about GUIs or portals into my dynamic computing environment. I very much want a personal DSL or set of DSLs for what I do on the computer, and I want to be able to hook into anything ala middle mouse button in plan9.
The superior alternative to walled gardens and this absurd world of bloat and 'feature loss' (for lack of a better term for software engineering's enthusiastic rejection of history) seems to be known, and facets of it advocated by you and these others. It seems clear that "using the computer" needs to return to "programming the computer" and that to achieve that we need to fundamentally change "programming the computer" to be a more communicative activity, to foster a better relationship between the computer and the user.
Where is this work being done now? VPRI shut down 2 years ago, Dynamicland seems to be on hiatus? I am inspired most these days by indie developers who write their own tools and build wild looking knowledge engines or what they sometimes call "trackers."[1] And of course the histories and papers put forward by the above and their predecessors. And I play with my own, building an environment where I can write, draw, code, execute and interact with it all. I see no existing product which approaches what I want.
> Everyone is busy building stuff for right now, today, rarely for tomorrow.
> Even when efficient solutions have been known for ages, we still struggle with the same problems: package management, build systems, compilers, language design, IDEs.
> You need to occasionally throw stuff away and replace it with better stuff.
> Business won’t care Neither will users. They are only learned to expect what we can provide.
> There’s no competition either. Everybody is building the same slow, bloated, unreliable products.
> The only thing required is not building on top of a huge pile of crap that modern toolchain is.
> I want something to believe in, a worthy end goal, a future better than what we have today, and I want a community of engineers who share that vision.
A take away from this scenario might be that this design space is wanting for a meta-editor. Some tool which allows feature creation in the same context as these markdown/note tools. An analogy might be that this meta-editor is to digital note keeping as racket is to programming languages.
Of course all the obvious requirements apply. Has to be usable out of the box, has to just work, has successfully convey it's ability to be changed to the end user.
I think emacs is such a solution, there are no features in the list of hn posts under the search "markdown" that it doesn't have. But emacs is missing all the requirements. It is not usable out of the box.
I think this meta editor could best be built on top of emacs, but this will require a lot of work. I have been playing around with this idea for a couple of years now and it's slow going but fun to think about.
I fundamentally disagree with the two assertions "it's the act of using your brain to simulate the computer that teaches your brain how the computer works so you can reason about it later" and "In most domains, I find it best to start with doing things yourself, and only move on to the tool-assisted version once you thoroughly understand what the tool is doing for you".
I agree entirely with the notion that ability to reason about the underlying system is incredibly important, but I disagree about the methods to get there.
I disagree with those two ideas because (and maybe we have different perspectives here) but the choice of whatever level is the "base level" or "bottom of the stack" seems entirely arbitrary every time. Is assembly the bottom? Or C? No it's machine code. No it's the physical wires.
I think I should come back to my original comment here and reiterate. I'll clarify what I mean about those "computing environments that do that thinking for us" because I expressed myself poorly.
There are computing environments and workflows that people have built which expose to the end user (the programmer) deep information about the state in which they are working. As a field, as a culture we have not embraced this thinking and rather stick to the simplistic notion of working alone to build understanding for ourselves alone.
Sharing is discouraged (outright banned at school under penalty of expulsion) and difficult requirements are kept in place primarily for hazing purposes rather than pedagogical(I have this from a one-on-one discussion with the course designer at my school). There's this thinking that "I had to go through it, and the system produced me, so it must be good" and to think otherwise would be a recognition of being failed by the system, of missing something. A recognition that you could be smarter now than you currently are.
So to give a concrete example, as my sibling comment talks about "being the packet". Why is the 'network', and 'understanding the network' not realized as exactly the same idea? Why should I ever have the simulate the network in my head? The network is an man-created artifact, my understanding of the network should come from the network, the literal code defining it, not from text file RFCs however well they are written and whatever brilliant ascii art they have (because they ARE well written, and well explained by their diagrams). Programmers should have inspection tools that are borne out of the definition of the artifact they are inspecting.
This is of course being done in other disciplines first. An architect working in Revit is orders of magnitude more powerful than an architect working on pen in paper. In every case where an architect prefers pen on paper it is due to a failure of technology to realize practical or targeted workflow affordances, not due to the superiority of paper.
This seems too broad to make a general rule. Shall I not use calculators and memorize trig tables to better understand the tools that are these functions?
I would be interested in seeing that experiment, I cant come up with a concrete example in my head which would follow that pattern.
> maps
I agree, I think most people should not have to become experts on local roads, then again, I think you over simplify the issue. I would bet that most people are experts on their local roads. I am in my hometown, I am not when I travel.
I do not know how pdfs are made today, but keynote/power point are generally drawn with WYSIWYG tools rather than post script or latex. I am not aware that I have ever read a pdf or been to a presentation with slides not generated by one of these WYSIWYG tools in my entire life. I have never actually opened one of these files, but I also don't expect that I could. I would bet they are not stored in text files.
Overall I contest each of your points, though I appreciate the ideas. I understand the sentiment but don't agree on the reality. Sorry for the late reply, I'm happy to continue if you have the time.