You are viewing archived messages.
Go here to search the history.

Mariano Guerra šŸ•°ļø 2020-10-23 13:19:11

I could not fit everything I wanted to show in two minutes so here's a demo of dynamic data filters: Populate a select or slider from a source and use it to filter a chart using forms and triggers https://www.youtube.com/watch?v=OgfxvQKdxZs

Prathyush 2020-10-26 09:05:50

The UI of the tool has improved and I like the green black combo. A note on the video: I think it is better presented by showing the problem first and then may be alluding to the kind of solutions that exist in the market and show how Instadeq solves it better, because otherwise, people who donā€™t have the context will find it a bit random. May be call it recipes or something and show how easy it is to solve the particular problem using Instadeq. In any case, great job polishing this and keeping on improving it.

Mariano Guerra 2020-10-26 09:18:48

It lacks a lot of context because I tried to fit it under 3 minutes šŸ˜„ still I've noticed that people ask me to explain more and go slower but if I make a video above 5 minutes less people watch it and those who do drop after a few minutes šŸ˜¢

Mariano Guerra 2020-10-26 09:19:15

After I finish some open issues I will make more detailed videos per topic/task šŸ™‚

Prathyush 2020-10-26 11:01:02

Yeah, I think a good way to market this would be to cut it short to may be like 1 minute Instagram like videos and then show how it solves a crucial problem. You might want to figure out a way to come up with such problems that can be solved swiftly and cleanly with this environment.

Prathyush 2020-10-26 11:02:06

I mean, once you get people hooked and show how it relates to their nagging daily problems, I think it would be an easy way to gain traction. I can see a lot such problems being able to be solved with an environment like this.

Mariano Guerra 2020-10-26 11:03:29

yes, I have to find the right balance of "pre set parts" and important steps, like those recipe videos that show you how to cook something in a couple of minutes

Mariano Guerra 2020-10-26 11:03:49

and use the short ones to direct users to the long ones where I explain all the details

Prathyush 2020-10-26 11:05:02

Yeah, that will be a neat transition. The juicy and wow part of this environment is when thereā€™s a significant problem being solved with this and you get all the nice replay abilities and multiway bindings undergoing, but to sell that part, may be pitch in with simple stuff and gradually build a userbase around it.

Danny Zuckerman 2020-10-26 16:48:41

Hi all -- we just released the alpha of http://idx.xyz, a JS library for interacting with a permissionless decentralized identity infrastructure (closets analogy: decentralized-keybase-as-a-service) that makes it easy to link accounts, keys, metadata, profiles and other resources (e.g., databases, verifications) together in a user-managed way.

The goal is enabling apps and users to manage information directly on an open and identity-centric network, without silos or trusted servers, and in the background of whatever tech stack/data models you're using today. Doing so makes critical info user-controllable, interoperable across any context, and much easier to build with and collaborate on. It's pretty early and works best with key-based auth right now, but working with partners to make it easy to use with social logins/magic links soon. Would love any and all feedback if this fits the goals of projects you are working on!

More context here if you're interested (fair warning: a bit of marketing-speak and jargon) -- https://medium.com/3box/idx-a-devkit-for-open-identity-48edc88e8e85

Paul Shen 2020-10-30 17:36:41

This is a prototype Iā€™ve been working on for browsing and reading code. The main ideas Iā€™m exploring are spatial organization, abstracting away files, and path-aware browsing. Itā€™s currently setup with the react-reconciler codebase and the linked canvas does a tiny tour of React hooks.

I'd love any questions/feedback. Would you use something like this? https://code-explorer.bypaulshen.com/?snapshot=9feb3d1a-b41e-44e6-adff-9b522414dc0b

Kartik Agaram 2020-10-30 17:48:58

I've been thinking along similar lines.

What do the lines between some of the boxes mean?

Are the line numbers useful in this organization?

Paul Shen 2020-10-30 17:51:17

the lines are part of the path-aware browsing. when you go to definition or drag a symbol to open a new pane, itā€™ll draw a line from parent -> child. By default, closing a pane will close all its children recursively.

Thatā€™s a good question about line numbers. One thing it tells you is that thereā€™s more content above if it doesnā€™t start at 0 but that can be conveyed in a different way. Thanks!

Kartik Agaram 2020-10-30 17:52:19

I see, so by 'path' you mean just the path of a specific browser session. Makes sense!

Chris Maughan 2020-10-30 18:16:05

I've spent the last few weeks trying to clean up and refactor a hugely complex collection of code. Tools like this are what I'm missing. An easy way to make a pin board of the fragments I need to hold in my head, and the relations between them. It's 2020 and tools still don't have good ways to do this! I applaud your efforts! Perhaps a usage video in #two-minute-week ?

Paul Shen 2020-10-30 18:52:34

Chris Maughan thanks! i totally agree with your sentiment

and iā€™ll try to make a video soon šŸ™‚

Shalabh Chaturvedi 2020-10-30 20:27:48

This looks great! I really like these customizable 'slice viewers'. One suggestion I'd have is to connect the line to source window at the the corresponding location in the scroll bar, rather than the top title bar.

BTW, have you seen http://sourcetrail.com?

Chris Granger 2020-10-30 22:00:44

Historical references that might be of interest down this vein:

Me and a couple of other folks were behind 2 and 3, though for 2 they removed a lot of the coolest stuff for whatever reason. Itā€™s really cool and a really neat way to debug, though when we tested it internally, people didnā€™t like it for writing. This introduced a hard divide between read time and write time and not being able to fluidly transition between the two caused people to rate their qualitative experience with the system fairly low.

Chris Granger 2020-10-30 22:01:51

Another thing we ran into is that it ended up requiring a fair amount of manual gardening to make it useful and over time people seemed to spend more of their effort on laying things out rather than getting better at it like we thought they would.

This is a beautiful looking implementation šŸ™‚ To take it all the way, itā€™s worth thinking about how youā€™ll tackle the tragedy of the commons and fluidity problems. Find reasonable answers to those and youā€™ll have something really special!

Chris Rabl 2020-10-30 22:06:38

Super job, Paul! This made me really think that the abstraction level at which we usually think about ā€œnode-and-wireā€ programming (typically the AST level) might not be optimal for exploring codebases. Just sort of spewing my thoughts here, but perhaps it would be better to expose different representations at different ā€œzoom levelsā€: for instance, if I zoomed into a file inside the code browser, it would turn into a graphical editor, but if I zoom out, I get a text representation. Or maybe it would be more reasonable to give the user a choice of which representation they wanted to see at a particular level of abstraction. It just seems like there is no ā€œone size fits allā€ representation that can encompass all levels of abstraction.

It also made me think deeper about the notion of ā€œincrementalismā€, and how we might do well to embrace some of those ideas as a community: donā€™t get me wrong, there are some things that you can only do by taking a ā€œgreenfieldā€ approach to development, but I think there is so much room for improving the status quo, that even ā€œsmallā€ changes in representation with existing languages/tools (in this case, JavaScript and the Monaco editor from VS Code) could have on the ā€œnear-term future of codingā€.

I think it would be really neat to explore breaking out the ā€œshow referencesā€ functionality into separate editor windows (or ā€œblocksā€) as well, something along the lines of what Dark has done in their editor (image below).

Maybe the ā€œfind referencesā€ command could draw temporary arrows to the files in the file explorer window, or highlight open windows that contain references to the item in question.

Finally, I think this would be absolutely killer for doing collaborative code reviews/pair programming. Stellar work!

Paul Shen 2020-10-31 02:34:01

Wow Iā€™m blown away by the quality of responses. Iā€™ve found the right place. Thank you all so much!

Shalabh Chaturvedi drawing the path to the code line would be ideal. Weā€™d have to listen to the scroll event but it might be doable. Iā€™ll take a look at sourcetrail.

Paul Shen 2020-10-31 02:40:41

Chris Granger Iā€™ve been linked to code bubbles and debugger canvas so many times now. I think thatā€™s great! The ideas clearly resonate with people and itā€™s something people want. All 3 products you linked to are packed with good ideas and I admire them all. (i donā€™t claim to be doing anything new)

Thatā€™s really good to know re mixed feedback. My current goal is to explore the best code reading experience (ala github). The write experience seems like itā€™d be a natural extension but Iā€™m learning why files and text manipulation still reign supreme. We humans are so well-versed in it haha.

Iā€™d love to hear more about the ā€œmanual gardeningā€ re debugger canvas. What did ā€œgetting better at itā€ mean in your head? Thanks for your advice!

Paul Shen 2020-10-31 02:52:02

Chris Rabl yeah! I love the idea of different lenses (e.g. zoom levels) on the same underlying. One thing I definitely want to explore is presenting the outline view somehow (high-level AST - e.g. functions, classes, etc.).

I think your point of ā€œincrementalismā€ is really important. When I hear ā€œfuture of codeā€ (or prompts like ā€œwhat does coding look like in 10 yearsā€), my mind jumps immediately to inventing PL and completely new tools. But you donā€™t need to convince me that if I tried to built an editor, even I wouldnā€™t end up using it. Actually another one of my projects was building something Dark-like (something I admire a lot) but with JS and monaco-editor panes on a canvas, very similar to the demo I linked to. Dark has so many good ideas and I love the exploration but I think itā€™s going to be hard to get people to learn a new language/editor today. Honestly, the most ā€œimpactfulā€ thing I could do is probably build a VSCode extension but I want the space to explore for now.

Thanks for the ideas and kind words! Imagine a Github browser and pull request UI that looks more like a canvas. Thatā€™s the direction Iā€™m stumbling towards.

Paul Shen 2020-10-31 02:57:08

my tabled hack of something Dark-like using JS + monaco

šŸ“· image.png

Chris Rabl 2020-10-31 04:47:36

Take my money! šŸ’µšŸ’µšŸ’µ

Garth Goldwater 2020-10-31 12:16:58

this feels, uh, REALLY good to use

Garth Goldwater 2020-10-31 12:23:40

Initial rambles:

one thing Iā€™d think about is getting a little more task-focused (this is already a pretty task-focused interface)

I find myself creating a kind of mise-en-place in iTerm windows where Iā€™m setting stuff up for some larger change or understanding. I think theres some implicit structure here that youā€™re hinting at with the child-pane relationships, and the notes that are free-floating vs the notes that are implicitly linked to certain views (e.g. ā€œthis is the code when useMemoā€¦). I think the structure isnā€™t so much the code as it is code-and-task. Iā€™d guess/hypothesize that the hierarchy actually goes big note (ā€œletā€™s look at the hook useMemoā€), annotation-style notes (on mount, it calls the given..) -> code symbols. theres a graphy-outlinely thing here (although I prefer these panes to say a workflowy interface, since in my experience stuff looks like a graph when youre working on it and an outline when youā€™re done)

maybe itā€™s actually that your notes are suggesting a transclusionā€” letā€™s look at the hook useMemo could be a notion-style slashword interface for pulling up code fragments that come immediately after where you typed in a separate pane

I really like the interface in macOS where you can box-select a bunch of files on the desktop and right click to collect them all into a folder. this feels like it could use that kind of a grouping construct

Jack Rusher 2020-10-31 18:21:01

Nice! I'd like to see tiled window manager-style auto layout and the ability to zoom in and out (see: ZUIs).

(Perhaps less usefully, it seems to be broken in Safari.)

Paul Shen 2020-11-01 01:05:59

Garth Goldwater iā€™m still formulating my thoughts but I think canvases might not be ideal for knowledge transfer (documentation). Along your lines of thought, I think documentation wants to be in a more linear format (e.g. notion doc or markdown file) so that itā€™s readable with ability to drill down/explore on the side. The notion-style slashword interface would be cool!

Makes me think of @Raathiā€™s post https://futureofcoding.slack.com/archives/CCL5VVBAN/p1600909703001500

[September 23rd, 2020 6:08 PM] raathigesh92: Experimenting with a code documentation idea - https://twitter.com/Raathigesh/status/1308728988160765952

nicolas decoster 2020-10-31 14:44:12

@Everett Pompeii I start a new thread here because I would love to see what you are working on! šŸ™‚ Do you have anything to share about it?

Some time ago I played with CRDT using Rust and WebAssembly! It was more a project to play with the CRDT concepts, and an occasion to try Rust and its compilation to WebAssembly. It was a very basic POC for a offline first text editor. It was for a local conference. Here is a link to code: https://gitlab.com/ogadaki/sunnytech-2019-wuer

[October 31st, 2020 3:03 PM] epompeii: <@UAVCC2X70> and <@UJ6LDMMN0> these both sound very similar to what Iā€™m working on. A visual/notebook based purely functional programming development environment with live data and time traveling for both previous inputs and each step of a run that uses CRDTs for collaboration.

Seeing it on this thread has me worried that this may be pushing the limits too much for whatā€™s currently feasible? Iā€™m using Rust targeting wasm in browser. Is this possible now? Do I need this beast machine to make that happen?

nicolas decoster 2020-10-31 14:53:26

Here is a "dynamic screenshot" of the result for this POC:

šŸ“· wuer.gif

Ivan Reese 2020-10-31 15:10:47

(I assume you're asking @Everett Pompeii ā€” Just posting an @-mention so that they won't miss this new thread in a new channel)

Everett Pompeii 2020-10-31 17:56:41

Great thought on a new thread, Nicolas Decoster!

And Iā€™ll also tag @Dan Cook if heā€™s interested in joining in.

Your demo looks super cool! I think itā€™s a great visual representation of what the CRDT is doing. Iā€™m still very much a novice in the CRDT space, once I get more up to speed I look forward to digging into the code to help me learn šŸ‘Øā€šŸ’»

I also have Kleppmannā€™s Designing Data-Intensive Applications sitting on my shelf waiting to be read.

As for my project, TableFlow, I built a basic dummy demo of it in React if you want to check it out: http://tableflow.org/studio/flow/#a

The motivation behind it is to build a ā€œbetter Excelā€ for power users and also software developers who would rather not deal with all the incidental complexity of modern app development for a project with complex logic, ie not just some CRUD app.

There are four core concepts: Tables, Flows, Subflows, and Decisions:

  • Tables are the core data type. Depending on how they are configured they can be algebraic data types (ADTs/enums), structs/maps, lists, values, and/or an arbitrary nesting of any of these. Sort of like a statically typed version of JS objects with ADTs and a shorthand for tabular data built in.
  • Flows are pure functions. A Flow can be called by any other Flow or via a REST (or possibly gRPC) call to an endpoint from outside of TableFlow. A Flow can contain zero to any number of Subflows.
  • Subflows are functions just like Flows, but they can only be called once and by their parent. Theyā€™re sort of the opposite of a closure in that scope must be explicitly passed into them. They are very similar to Brian Willā€™s concept of a ā€œuseā€ function. They help break up Flows both visually and in terms of size/scope. At any point in the future a Subflow can be converted into a standalone Flow if necessary.
  • Decisions are DMN decision tables on steroids. They are where conditional logic, Flow branching, and auto-iteration over all the rows in a table happen. Good example of the first two: https://docs.appian.com/suite/help/20.3/Appian_Decisions.html

There would be live data supplied to a Flow by filling in the input Tables. There would be a slider at the top of this input to time travel through the input history. Some of these inputs can be saved as ā€œsnapshotsā€ along with their corresponding outputs. TDD would be built in, so every time a change is made, all applicable snapshots are run against the change and its outputs.

Once a run occurs, there would be a built in time traveling debugger. Each piece of computed/output data would have its own slider that jumps between when there was actually a change to that piece of data in the last run. Recursion is possible so there may be multiple time points.

I also want Tables to be reusable between Flows. The software engineer in me really wants to add public and private ā€œTable Subflowsā€ (ie methods) and then Iā€™m like, well why not interfaces too!

I will probably settle for reusable Tables with methods. Having interfaces would be great, but then I remind myself that even power users of Excel arenā€™t use to being able to write their own functions natively!

The eventual goal would be to build a TableFlow config => Rust compiler that would spit out a production grade Rust server.

Can you see me drowning in my own ambition yet? šŸŠā€ā™‚ļøšŸ¦ˆ

I played around with doing the UI in Elm, looked at ReasonML, and Iā€™m currently giving Seed (seed-rs) a spin. I like The Elm Architecture for the frontend, but Iā€™m just going to try doubling down on the Rust->wasm ecosystem and hopefully the wasm DOM API becomes a thing down the road and closes the performance gap.

nicolas decoster 2020-11-01 09:49:13

Can you see me drowning in my own ambition yet?  > šŸŠā€ā™‚ļø> šŸ¦ˆYes! I guess people here knows that feeling. šŸ˜… I guess we are a bunch of futurists swimming or sailing the seas of programming. Sometime feeling like drowning, sometime like surfing.

nicolas decoster 2020-11-01 10:04:56

The motivation behind it is to build a ā€œbetter Excelā€ for power users and also software developers who would rather not deal with all the incidental complexity of modern app development for a project with complex logic, ie not just some CRUD app.I also think it is an interesting target audience. Not really all end users, but some that want to do a bit more programming. And trying to create tools for them and also for some "expert" developers is something very interesting.

nicolas decoster 2020-11-01 10:08:14

I like your idea to keep history to make things more explorable by keeping the time dimension. I guess this can become very tricky. I guess you have to find a way to manage the space limit for the history, i.e. when it takes too much resources. For simple use case it can be fine, but when you manage big tables that changes often you will have to remove part of the history.

Everett Pompeii 2020-11-01 15:13:22

sometime like surfingIā€™ll try and get there! šŸ„ā€ā™‚ļø

And trying to create tools for them and also for some ā€œexpertā€ developers is something very interesting.This honestly comes from me being a big personal finance nerd, and I once made a spreadsheet that calculates all of my finances, think a personal double sided balance sheet. Coming back a year later though, it made the engineer side want to cry. It was impossible to maintain efficiently, but I also didnā€™t want to manage an app to do it either. Then as I learned more about the adoption of Functions-as-a-Service, it seemed to really extend the upper limit for the use cases.

I guess you have to find a way to manage the space limit for the history, i.e. when it takes too much resources.Yeah, this is definitely an outstanding question. I imagine I will just do a simple set sized FIFO cache to start out, and then down the road I could push to something like IndexedDB (once those bindings actually exist in Rust -> wasm).

Kartik Agaram 2020-10-31 21:48:51

For a couple of years I've been building up a computing stack without metacircularity, where complex languages are consistently implemented in simpler languages.

For several months now I've been wrestling with a thorny problem in one corner of the core compiler which converts a safe language into unsafe machine code. Today I finally decided to stop agonizing over it, and write up the idea maze to the extent I've explored it.

https://github.com/akkartik/mu/issues/45

Comments and suggestions most appreciated. This is a fairly simple compiler as these things go, and I'd be happy to engage with anyone who wants to learn about these beasts in a realistic setting.

Andrew F 2020-10-31 23:24:17

I think of the end of the function as the beginning of the return value's lifetime, not the end. Maybe you could find a way to "initialize" the output variable at/near the end, or maybe just take that perspective as a vote for explicit returns.

What are the intended semantics of example 4, where you seem to have x and out mapped to the same register in the same scope. Or is out spilled during the body block, and the assignment to out is targeted at the stack, then popped between the body block and the "actual" function block? It looks like I answered my question while writing it, but I'll leave this just in case I got it wrong...

Kartik Agaram 2020-10-31 23:35:39

Yeah, that's a good insight. I wish I'd thought of that a year ago..

If you first ignore outputs, the semantics of a var B in a new block are that it shadows any var A in an outer block. However, a second var C to the same register in the same block simply clobbers the register. There's no way afterwards to get the first var B.

Now reintroducing function outputs in example 4, the assignment to out would write register eax. Then the break would increment the stack pointer to skip the saved value of x before jumping to end of function.

Does this make sense?

Andrew F 2020-11-01 06:39:39

I think I understand your description. So at the write to out, x2 is "shadowing" x in eax, x is on the stack, then out clobbers x2?

My instincts say, if you're doing it this way, out should be spilled to the stack like other vars when you enter $foo:body. Then the break would in principle pop x, immediately pop out, and ret. If you're treating output vars as a special case wrt storage management, I don't see how you're getting any benefit from making them syntactically look like regular vars.

Is anything sensible supposed to happen if you don't immediately follow a write to an output with a break or something? Is that verboten, and if so is it checked?

Maybe you should just ban mapping multiple vars to to same register in the same block, and consider out mapped at the function level. x isn't allowed to be in eax until you push a new block.

Hopefully this is semi-useful, but it's late here. :) FWIW, I didn't invent the idea about returns being the start of a new lifetime. It's mostly derived from Single Static Information IR, which has a similar relationship to SSA as Plan9 does to Unix: even more idealistic, and no one uses it.